ios - Why didn't JSON parser catch non-validated data? -


एक बार & amp; थोड़ी देर मुझे घातक दुर्घटना मिलती है: EXC_BAD_INSTRUCTION

यह कुछ पुनरावृत्तियों के बाद हो सकता है।

मैंने पता लगाया है दुर्घटना का स्रोत ( जो मैं इसे मानता है ) NSJSONSerialization पार्सर जो एक गैर-मान्य स्ट्रिंग प्राप्त होता है - & gt; जानकारी।

यही है, यह कुछ पुनरावृत्तियों के लिए काम करता है (बाहर निकलें, ऐप को पुन: लॉन्च करें और फिर से चलाएं); फिर क्रैश हो जाता है सिम्युलेटर को साफ़ करें & amp; पुनर्निर्माण ... पैटर्न दोहराता है

मैंने इसे JSON कॉल के ठीक पहले एक println (स्ट्रिंग) करके किया है; और एक JSON validator में स्ट्रिंग का एक कट / पेस्ट किया और errant '(' शुरुआत में :

  ({"photos": {"पृष्ठ": 1, "पृष्ठ": 1340, .....   

< / P>

यहां वास्तविक स्क्रीन डंप है:

यहां छवि विवरण दर्ज करें < / P>

प्रश्न: क्यों नहीं JSON पार्सर इस त्रुटि को NSError बनाम एक घातक अपवाद फेंकता है?
... यह एक बग है?

आप जबरन से NSJSONSerialization.JSONObjectWithData () से लौटा वस्तु को खोलना चाहते हैं, लेकिन पार्सर त्रुटि होने पर यह शून्य होगा। ऐसा होता है, तो आप एक रनटाइम त्रुटि से क्रैश करते हैं।

चूंकि आप jsonError की सामग्री को बिल्कुल नहीं देखते हैं, आप त्रुटि पैरामीटर को अनदेखा कर सकते हैं और इसके बजाय वैकल्पिक बाइंडिंग का उपयोग कर सकते हैं, जैसे

  अगर JSOND को दें तो ict = NSJSONSerialization.JSONObjectWithData (डेटा !, विकल्प:। AllowedFragments, त्रुटि: शून्य) के रूप में NSDictionary {// JSONDict के साथ कुछ करना} अन्य {println ("त्रुटि")}}   

यदि आप त्रुटि ऑब्जेक्ट का निरीक्षण करना चाहते हैं, तो आप इसे इस तरह लिख सकते हैं:

  JSONDict = NSJSONSerialization.JSONObjectWithData (डेटा !, विकल्प:। अनुमति दें, त्रुटि: & jsonError) NSDictionary के रूप में? यदि JSONDict == नीला {यदि आज्ञा देना है तो = jsonError {println (err.localizedDescription)} return} // JSONDict     के साथ कुछ करें

Comments

Popular posts from this blog

php - PDO bindParam() fatal error -

logging - How can I log both the Request.InputStream and Response.OutputStream traffic in my ASP.NET MVC3 Application for specific Actions? -

java - Why my included JSP file won't get processed correctly? -