在我看来,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 库中还有另一个较低级别的函数,用于记录收到的所有消息。
任何帮助将非常感激。