NSNotificationCenter defaultCenter iOS 8.通知未发送给其中一个观察者

时间:2014-09-19 09:15:31

标签: ios nsnotificationcenter

之前的iOS 8一切正常。问题是: 我有两个不同班级的观察员:

的Class1:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didFinishParseUser:)
                                             name:USERS_LOADED_NOTIFICATION_ID object:nil];

等级2:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didFinishParseUser:)
                                                 name:USERS_LOADED_NOTIFICATION_ID object:nil];

并在其他地方发布通知:

[FBRequestConnection startWithGraphPath:@"me/friends?fields=id,first_name,last_name,picture.type(small)" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
    if (!error) {
        [[NSNotificationCenter defaultCenter] postNotificationName:USERS_LOADED_NOTIFICATION_ID object:nil userInfo:[NSDictionary dictionaryWithObjectsAndKeys: currentUser, @"user", friends, @"friends", nil]];
    } else {
        // An error occurred, we need to handle the error
        // See: https://developers.facebook.com/docs/ios/errors
    }
}];

为两个提到的类调用addObserver方法,但是通知只传递给一个观察者。如果我删除此观察者(接收通知),则另一个观察者收到通知。 在iOS 8之前,两个观察者都会收到通知。

请帮助我解决这个问题?

2 个答案:

答案 0 :(得分:0)

找到答案。 iOS 8中还有另一种注册接收远程通知的方法。我在设备令牌和应用程序中断时为零:

NSDictionary *item = @{UID_ID : sCurrentUserId, @"deviceToken": appDelegate.deviceToken, @"handle": @"", @"friends": friends};

第二位观察员从未收到通知。

答案 1 :(得分:-1)

您需要注册您的NSNotifications才能在iOS 8及更高版本上运行,但如果您的iOS版本低于iOS 8,则无需注册。 使用以下代码

 NSArray *vComp = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];

if ([[vComp objectAtIndex:0] intValue] >= 8) {
    [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationActivationModeBackground categories:nil]];

}

快乐编码