我的iOS应用在运行时收到推送通知消息时崩溃。我正在使用沙箱APNS环境,并使用Amazon SNS发送APNS消息。
调试时,我在以下代码片段的第一行设置了一个断点:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSDictionary *apnsPayload = [NSDictionary dictionaryWithDictionary:userInfo];
当应用收到推送通知时,它会到达断点并让我调试;在这一点上,我可以看到userInfo
是非零并包含预期的字典。
但是,当我单步执行代码时,应用程序会在下一行EXC_BAD_ACCESS
崩溃 - 分配给apnsPayload
。似乎userInfo
可能会过早地解除分配,但我不确定为什么,或者更重要的是如何改变它。
答案 0 :(得分:0)
我认为将NSDictionary转换为另一个带有[NSDictionary dictionaryWithDictionary:]的NSDictionary是不合理的...同时NSDictionary可以是非零但包含0个键条目(空字典)。
也许你想要:NSDictionary * apnsPayload = [userInfo objectForKey:@“alert”]; ?
答案 1 :(得分:0)
好吧,我仍然不知道为什么会发生这种情况,但是当NSLog()
userInfo
参数首先出现时,它就会停止。添加以下行作为函数的第一行可以防止崩溃:
NSLog(@"Received APNS with userInfo %@", userInfo);
然后我可以使用- [userInfo objectForKey:]
进行分配而不会导致崩溃。 (要明确的是,在没有先前NSLog()
的情况下尝试相同的作业会导致EXC_BAD_ACCESS
崩溃。)