objective-c - PubNub 4.0在Swift中建立回调接收消息

标签 objective-c swift pubnub respondstoselector

在我看来,PubNub 的 Swift 入门文档不适用于 PubNub 4.0 之前的版本。我无法成功建立回调以注册 PubNub。

我的代码:

class Communicator: NSObject, PNObjectEventListener {

    var pubNubClient: PubNub

    override init(){
        let config = PNConfiguration(
            publishKey: "my_publish_key",
            subscribeKey: "my_subscribe_key"
        )
        pubNubClient = PubNub.clientWithConfiguration(config);
        super.init()
        pubNubClient.addListener(self)
        pubNubClient.subscribeToChannels(["my_channel"], withPresence: false)
    }

    func didReceiveMessage(client: PubNub!, message: PNMessageResult!){
        /* THIS METHOD NEVER GETS REACHED */
    }
}

深入研究 PubNub 源代码,这是似乎有问题的地方:

- (void)addListener:(id <PNObjectEventListener>)listener {

    dispatch_async(self.resourceAccessQueue, ^{

        if ([listener respondsToSelector:@selector(client:didReceiveMessage:)]) {
            /* this block is never reached!!! */
            [self.messageListeners addObject:listener];
        }

    /* Remaining Lines Stripped Away */
    });
}

我对 Swift 和与 Objective C 的集成还比较陌生。我很好奇 respondsToSelector 是否有问题,因为 Objective C 代码正在引用 Swift 代码。

消息肯定会被传递; PubNub 库中还有另一个较低级别的函数,用于记录所有收到的消息。

如有任何帮助,我们将不胜感激。

最佳答案

4.0 之前的版本已弃用,不再像以前那样工作。

我建议完全迁移到最新的 (4.0) SDK,新的 iOS SDK 消除了很多膨胀并且编译速度更快。开始查看 this tutorial .

总而言之,实例化 PubNub 客户端如下所示:

let config = PNConfiguration( 
    publishKey: "Your_Pub_Key", 
    subscribeKey: "Your_Sub_Key")   
client = PubNub.clientWithConfiguration(config) 
client?.addListener(self) 
client?.subscribeToChannels(["Your_Channel"], withPresence: false)       

新的 didReceiveMessage 函数如下所示:

func client(client: PubNub!, didReceiveMessage message: PNMessageResult!, withStatus status: PNErrorStatus!) { 
     //Do Something like
     //println(message) 
}

关于objective-c - PubNub 4.0在Swift中建立回调接收消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31254856/

相关文章:

ios - 呈现不同的局部 View iOS Swift

ios - 后退按钮后隐藏的导航栏

ios - Pubnub iOS 推送通知过滤?

java - 使用 pubnub 制作 Android 应用程序发送 GPS 信息,但应用程序崩溃并且没有显示错误

c++ - OpenCV - 如何将自适应阈值应用于 iOS 上的图像

ios - 从后台线程调用时在 iPad 上延迟

swift - 从 parse.com 检索信息时无法调用非函数类型 [PFObject] 的值

ios - 在 react native 应用程序中未达到 Pubnub 历史回调

objective-c - 如何在 OSX 上以编程方式打开和关闭蓝牙、wifi 和声音

ios - UITableView 异步 UIImage 设置