【发布时间】:2014-07-22 19:04:05
【问题描述】:
我正在检查 AppDelegate.m、RootViewController.m 和 ViewControllerB.m 中的传入消息。
用户打开应用程序(首次启动 - 安装)、注册然后登录后,一切正常。 5 秒或 50 分钟后(没关系)当前用户退出并出现一个新用户,该用户创建一个新帐户或使用现有配置文件登录。现在,当前用户(成功)向他自己的频道发送了一条消息,但是这次消息观察者不起作用,观察者没有日志。但是,如果我从 Xcode 关闭应用程序并再次启动它,它会再次正常工作。
我确定这不是网络问题,因为历史记录包含我发送的每条消息,并且客户端每次都连接。但不幸的是,消息接收到的观察者就像他们不存在一样。
我怀疑当用户注销并取消订阅他正在收听的频道时会出现问题。我已经尝试过使用和不使用removeMessageReceiveObserver:,但没有帮助我。
这是我在用户注销时取消订阅的方式:
if (cell == staticCell ) {
...
NSArray *unsubscribe = @[channel1, channel2];
//unsubscribe user from channels
[PubNub unsubscribeFromChannels:unsubscribe];
// remove observer and disconnect from PubNub.
[[PNObservationCenter defaultCenter] removeMessageReceiveObserver:self];
[PubNub disconnect]; // also tried without closing the connection
//log out user
[PFUser logOut];
[self presentLoginViewControllerAnimated:YES];
这是我的观察者:
// I'm using this in RootViewController.m and ViewControllerB.m
[[PNObservationCenter defaultCenter] addMessageReceiveObserver:self withBlock:^(PNMessage *message) {
if ([message.channel.name isEqualToString:my_channel] ) {
NSLog(@" message: %@ ", message.message);
}
// AppDelegate.m
- (void)pubnubClient:(PubNub *)client didReceiveMessage:(PNMessage *)message {
if ([message.channel.name isEqualToString:my_channel] ) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"New message"
message: messageContent delegate:self
cancelButtonTitle:@"Ok!"
otherButtonTitles:nil, nil];
[alertView show];
}
我错过了什么吗?在取消订阅之前,我还应该实施其他方法吗?
【问题讨论】:
标签: ios objective-c pubnub