2014-10-07 12 views
6

मैं सूचनाएं मैं JSON प्रारूप में भेजने को संभालने के लिए पार्स गाइड का पालन करने की कोशिश कर रहा हूँ, लेकिन मैं समस्या आ रही है हैंडलिंग, यहाँ मेरी कोड है ऐप अब क्रैश नहीं होता है, लेकिन मेरे द्वारा किए गए परिवर्तन नहीं होते हैं। Json कोड:Xcode, पार्स दूरस्थ सूचनाएं

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

उत्तर

8

मैं आपकी समस्या अनुमान लगा रहा हूँ यहाँ है:

launchOptions(UIApplicationLaunchOptionsRemoteNotificationKey) as NSDictionary 

मुझे यकीन है कि आप क्या उम्मीद कर रहे हैं नहीं कर रहा हूँ, लेकिन जहाँ तक मुझे पता है, वहाँ इस तरह की कोई विधि नहीं है एक शब्दकोश पर। आप सबस्क्रिप्ट सिंटैक्स की तलाश में हो सकते हैं। कुछ इस तरह: UIApplicationLaunchOptionsRemoteNotificationKey:

launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey] as NSDictionary 

एक शब्दकोश के तहत कुंजी launchOptions शब्दकोश भीतर नेस्ट प्राप्त करने के लिए।

कहा जा रहा है कि, लॉन्चऑप्शन शून्य हो सकता है, आपको उस कोड को अपने कोड में जोड़ना चाहिए और launchOptions लॉगिंग करने का प्रयास करें और यहां परिणाम पोस्ट करें।

आप देख सकते हैं launchOptions इस तरह नहीं के बराबर हैं:

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

कृपया, मेरा अपडेट किया गया पोस्ट, और क्या जाँच करने के लिए करता है, तो launchoptions == शून्य? – Abdou023

+0

कैसे शून्य के लिए जाँच करने के लिए अपडेट किया गया, मैं नहीं यकीन अगर वे शून्य हैं तो आपको क्या करना चाहिए। मुझे लगता है कि वे शून्य हैं, तो आवेदन के माध्यम से खोला नहीं गया था एक अधिसूचना और आपको अभी जारी रखना चाहिए। – Logan

+0

यह काम किया, लेकिन अब मैं अधिसूचना को अपने ऐप को प्रभावित करने में सक्षम नहीं हूं। कृपया मेरा संपादन जांचें। – Abdou023

3

NSDictionary के objectForKey एक वैकल्पिक रिटर्न:

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

इसलिए यदि आप खोलना इसे प्रयोग के लिए मजबूर! वैकल्पिक विकल्प शून्य होने पर आप अपना जोखिम लेते हैं। आपको अनचाहे केवल तभी मजबूर होना चाहिए जब आप 100% सुनिश्चित हों कि वैकल्पिक में एक मान होता है लेकिन इस मामले में UIApplicationLaunchOptionsRemoteNotificationKey केवल तभी सेट किया जाता है जब उपयोगकर्ता अधिसूचना केंद्र में रिमोट अधिसूचना संदेश पर टैप करते समय एप्लिकेशन लॉन्च किया जाता है।

आप वैकल्पिक और NSDictionary ?:


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

के रूप में प्रयोग करने के लिए खिन्न के लिए जांच करना चाहिए ("के रूप में NSDictionary?" सख्ती से, की आवश्यकता नहीं है क्योंकि बाद में आप खिन्न कर सकते हैं, यदि आप खिन्न स्विफ्ट नहीं है आपको चेतावनी देगा कि myDict वस्तु AnyObject के रूप में अनुमान लगाया जा होगा।

+0

ऐसा किया गया है, फिर भी वही त्रुटि प्राप्त करें। – Abdou023

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

} 
संबंधित मुद्दे