【发布时间】:2015-07-06 20:18:54
【问题描述】:
在我看来,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 库中还有另一个较低级别的函数,用于记录收到的所有消息。
任何帮助将不胜感激。
【问题讨论】:
标签: objective-c swift pubnub respondstoselector