Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的iOS应用程序在收到推送通知时崩溃?_Ios_Apple Push Notifications - Fatal编程技术网

为什么我的iOS应用程序在收到推送通知时崩溃?

为什么我的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

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

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

- (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中提取aps
dictionary的方法;请参阅我对以下答案的评论。请通过编辑将问题附加到原始问题,而不是将其作为答案发布。:)什么问题?我说我找到了解决办法。(无可否认,这不是一个很好的解决方案,这就是为什么我还没有接受任何答案;但代码确实在运行。)哦,很抱歉我的误解。