2014-10-07 5 views
6

Ben Json formatında göndermek bildirimleri işlemek için Ayrıştırma Kılavuzu izlemeye çalışıyorum, ama bir sorun yaşıyorum Handling, burada benim kodudur uygulama artık çökmez, ancak yaptığım değişiklikler gerçekleşmez. Json kodu:Xcode, Ayrıştırma uzak bildirimleri

{ 
    "aps": { 
     "badge": 10, 
     "alert": "Test", 
     "sound": "cat.caf" 
    }, 
    "url": "http://www.google.com" 
} 

cevap

8

Sorununu tahmin ediyorum burada:

launchOptions(UIApplicationLaunchOptionsRemoteNotificationKey) as NSDictionary 

Ne bekliyorsanız emin değilim, ama bildiğim kadarıyla, böyle hiçbir yöntem yoktur bir sözlükte. Senaryo sözdizimi arıyor olabilirsiniz. Böyle bir şey: UIApplicationLaunchOptionsRemoteNotificationKey:

launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey] as NSDictionary 

anahtar altında launchOptions sözlük içinde yuvalanmış bir sözlük almak için.

Yani, launchOptions sıfır olabilir, bu denetimi kodunuza eklemelisiniz ve ayrıca launchOptions oturumunu kapatıp sonuçları buradan göndermeyi deneyin.

launchOptions böyle nil olup olmadığını kontrol edebilirsiniz:

if let launchOpts = launchOptions { 
    var notificationPayload: NSDictionary = launchOpts.objectForKey(UIApplicationLaunchOptionsRemoteNotificationKey) as NSDictionary 
} 
+0

, launchoptions == nil? – Abdou023

+0

nil kontrol etmeyi biliyor için güncellenmiş, emin değilim eğer yapmak benim güncellenmiş yazı ve ne kontrol edin Eğer onlar nil ise ne yapmalısın, eğer onlar sıfır olursa, uygulamanın bir bildirim ve sadece devam etmelisiniz. – Logan

+0

Bu işe yaradı, ancak şimdi bildirimin uygulamanızı etkilemesini sağlayamıyorum. lütfen düzenlememi kontrol et. – Abdou023

3

NSDictionary en objectForKey opsiyonel verir:

func objectForKey(_ aKey: AnyObject) -> AnyObject?

yüzden bunu kullanarak unwrap zorlarsanız! İsteğe bağlı nil içeriyorsa, riskinizi alırsınız. İstemci bir değer içerdiğinden% 100 emin olduğunuzda paketlemeyi zorlamanız gerekir, ancak bu durumda UIApplicationLaunchOptionsRemoteNotificationKey, yalnızca kullanıcı bildirim merkezinde bildirim kutusundaki uzaktan bildirim iletisine dokunduğunda uygulama başlatıldığında ayarlanır.

daha sonra downcast gibi Sen NSDictionary ?:

if let myDict = launchOptions[UIApplicationLaunchOptionsRemoteNotifcationKey] as? NSDictionary { 
// there is a notification 
} else { 
// no notification 
} 

olarak kullanarak İhtiyari ve mahzun için kontrol etmeli

("NSDictionary olarak?" Kesinlikle gerekli değildir, siz mahzun Swift yoksa myDict nesne AnyObject olarak anlaşılmaktadır olacağını sizi uyaracaktır.

+0

bunu yaptı, hala aynı hatayı al. – Abdou023

2
if let remoteNotification = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? NSDictionary { 

}