0

我的 iOS 应用程序在运行时收到推送通知消息时崩溃。我正在使用沙盒 APNS 环境,并使用 Amazon SNS 发送 APNS 消息。

调试时,我在以下代码片段的第一行设置了一个断点:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
  NSDictionary *apnsPayload = [NSDictionary dictionaryWithDictionary:userInfo];

当应用程序收到推送通知时,它会触发断点并让我进行调试;此时我可以看到它userInfo不是零并且包含预期的字典。

但是,当我单步执行代码时,应用程序EXC_BAD_ACCESS在下一行崩溃——分配给apnsPayload. 似乎userInfo可能会过早地被释放,但我不确定为什么,或者更重要的是如何改变它。

4

2 回答 2

0

我认为使用 [NSDictionary dictionaryWithDictionary:] 将 NSDictionary 变成另一个 NSDictionary 是没有意义的……而且 NSDictionary 可以是非零但包含 0 个键条目(一个空字典)。

也许你想要: NSDictionary *apnsPayload = [userInfo objectForKey: @"alert"]; ?

请参阅:https ://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html

于 2013-10-30T21:57:27.553 回答
0

好吧,我仍然不知道为什么NSLog()会这样,但是当我第userInfo一次争论时它就停止了。添加以下行作为函数的第一行可以防止崩溃:

  NSLog(@"Received APNS with userInfo %@", userInfo);

然后我可以分配 using- [userInfo objectForKey:]而不会导致崩溃。(需要明确的是,在没有先前NSLog()结果的情况下尝试相同的分配会导致EXC_BAD_ACCESS崩溃。)

于 2013-10-31T01:06:21.077 回答