2013-10-30 69 views
0

我的iOS應用程序在運行時收到推送通知消息時會崩潰。我正在使用沙箱APNS環境,並使用Amazon SNS發送APNS消息。爲什麼我的iOS應用程序在收到推送通知時崩潰?

調試時,我設置一個斷點在下面的代碼片段的第一行:

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

當應用程序收到一個推送通知,它命中斷點,讓我調試;在這一點上,我可以看到,userInfo是非零,幷包含預期的字典。

但是,當我單步執行代碼時,應用程序在EXC_BAD_ACCESS的下一行崩潰 - 分配到apnsPayload。看起來好像userInfo可能會過早釋放,但我不知道爲什麼,或者更重要的是如何改變這一點。

+0

你試過了嗎?這就是我從userInfo中提取'aps'字典的方式。 – Eran

+0

我有;看到我對下面答案的評論。 – Calrion

回答

0

嗯,我仍然不知道爲什麼正在發生的事情,但是當我第一次NSLog()userInfo爭論停止。加入以下線作爲函數的第一行防止碰撞:

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

然後我可以分配使用- [userInfo objectForKey:]而不引起崩潰。 (要清楚,試圖在沒有事先NSLog()之前的NSLog()崩潰結果的同一作業。)

+0

請通過編輯將問題附加到原始問題上,而不是作爲回答發佈。 :) – Kjuly

+0

什麼問題?我說我找到了解決方案。 (誠​​然,這不是一個很好的解決方案,這就是爲什麼我還沒有接受任何答案,但代碼確實運行。) – Calrion

+0

哦,對不起,我誤解了。 – Kjuly

0

我不認爲它是有道理的將NSDictionary轉換爲另一個NSDictionary與[NSDictionary dictionaryWithDictionary:] ...也NSDictionary可以是非零,但包含0鍵條目(空字典)。你可能想要:NSDictionary * apnsPayload = [userInfo objectForKey:@「alert」]; ?

參見:https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html

+0

我正在那樣做,結果相同;我發佈的片段是徒勞的嘗試是'更安全'。我在調試時觀察到的'userInfo'字典具有所有期望的數據。 – Calrion

相關問題