为什么我的iOS应用程序在收到推送通知时崩溃?
我的iOS应用程序在运行时收到推送通知消息时崩溃。我正在使用沙盒APNS环境,并使用Amazon SNS发送APNS消息 调试时,我在以下代码段的第一行设置了断点:为什么我的iOS应用程序在收到推送通知时崩溃?,ios,apple-push-notifications,Ios,Apple Push Notifications,我的iOS应用程序在运行时收到推送通知消息时崩溃。我正在使用沙盒APNS环境,并使用Amazon SNS发送APNS消息 调试时,我在以下代码段的第一行设置了断点: - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { NSDictionary *apnsPayload = [NSDictionary dictionaryWithDict
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSDictionary *apnsPayload = [NSDictionary dictionaryWithDictionary:userInfo];
当应用程序收到推送通知时,它会点击断点并让我调试;此时,我可以看到userInfo
是非nil的,并且包含预期的字典
但是,当我单步执行代码时,应用程序会在分配给
apnsPayload
的下一行崩溃。看起来,userInfo
可能会过早地被解除分配,但我不确定为什么,或者更重要的是,如何改变这一点。我认为将NSDictionary与[NSDictionary Dictionary WithDictionary:]一起变成另一个NSDictionary是没有意义的。。。此外,NSDictionary可以是非nil,但包含0个键条目(空字典)
也许您需要:NSDictionary*apnsPayload=[userInfo objectForKey:@“alert”]
请参阅:我仍然不知道为什么会发生这种情况,但当我首先使用NSLog()
参数userInfo
时,它就会停止。添加以下行作为函数的第一行可防止崩溃:
NSLog(@"Received APNS with userInfo %@", userInfo);
然后,我可以使用
-[userInfo objectForKey:
进行分配,而不会导致崩溃。(要明确的是,在没有先前的NSLog()
的情况下尝试相同的赋值会导致EXC\u BAD\u访问
崩溃。)我当时正在这样做,结果也是一样的;我发布的这个片段是为了“更安全”而徒劳的尝试。调试时我观察到的userInfo
字典具有所有预期数据。您是否尝试过NSDictionary*apsInfo=[userInfo objectForKey:@“aps”]代码>?这就是我如何从userInfo中提取apsdictionary的方法;请参阅我对以下答案的评论。请通过编辑将问题附加到原始问题,而不是将其作为答案发布。:)什么问题?我说我找到了解决办法。(无可否认,这不是一个很好的解决方案,这就是为什么我还没有接受任何答案;但代码确实在运行。)哦,很抱歉我的误解。