isRegisteredForRemoteNotifications使用semaphore_wait_trap锁定UI

时间:2017-03-27 17:06:36

标签: ios push-notification locking hang

当我的iOS应用程序收到推送通知时,会发生奇怪的情况。用户界面保持锁定,无效。当我暂停调试器时,我在我的线程中看到semaphore_wait_trap

扩展代码我可以看到它与两件事有关:

  • 推送通知中的值类型(因为当我将Number更改为String时,问题消失了);
  • isRegisteredForRemoteNotifications方法(因为当我删除它时,问题就会消失);

我收到了推送通知,如下所示

{aps: 
    {alert: { loc-args: [Fiat, Bravo, 501],
     loc-key: SOME_TEXT 
    },
    badge: 0,
    sound: default.aiff
    }
}

我在Xcode中创建了一个新的简单项目来证明我在说什么。我使用以前的捆绑标识符来接收相同的推送。 按照AppDelegate中显示问题的代码:

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    return YES;
}

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

    NSLog(@"My token is: %@", deviceToken);
}

- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error {
    //    [DefaultMethods saveInUserDefaults:@(1) forKey:kUserWasAskedForNotificationKey];
    NSLog(@"Failed to get token, error: %@", error);
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

    if( [[UIApplication sharedApplication] isRegisteredForRemoteNotifications] ){
        NSLog(@"Success");
    }
}


@end

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我也在处理这个问题,并在设备的日志中发现了这个错误:

  

com.apple.usernotifications.usernotificationservice:捕获异常   在接收消息的解码期间,丢弃传入消息。   例外:解码参数0时的异常(调用的#2):   例外:关键'NS.objects'的值是意外类   '的NSNumber'。允许的班级是'{(       NSString的,       NSArray)}'。

在调用isRegisteredForRemoteNotifications后,应用程序已停止。

我们已在服务器上解决此问题,问题仍然存在。祝你好运。