2012-03-01 11 views
9

मैं JSON से कुछ प्रतिक्रिया प्राप्त कर रहा हूँ, और ठीक काम कर रहा है, लेकिन मैं कुछ null मूल्यों के लिए जाँच करने के लिए की जरूरत है,ios जाँच करता है, तो NSArray == बातिल

मैं अलग जवाब मिल गया लेकिन लगता है अभी भी काम नहीं कर रहा है,

NSArray *productIdList = [packItemDictionary objectForKey:@"ProductIdList"]; 

मैं

if (!productIdList.count) //which breaks the app, 

if (productIdList == [NSNull null]) // warning: comparison of distinct pointer types (NSArray and NSNull) 

तो क्या हो रहा है के साथ की कोशिश की? इसे कैसे ठीक करें और मेरी सरणी में null देखें?

धन्यवाद!

+1

आपका क्या मतलब है "ऐप ब्रेक"? यदि यह अपवाद उठा रहा है, तो लॉग संदेश पोस्ट करें। –

उत्तर

31

एक डाली का उपयोग कर चेतावनी को हटा दें: क्योंकि NSNullcount संदेश नहीं समझती

if (productIdList == (id)[NSNull null]) 

तो productIdList तथ्य [NSNull null] में है, तो productIdList.count कर एक अपवाद को बढ़ा देंगे।

+0

@MaKo ... और, निस्संदेह, यह काम करता है क्योंकि '[NSNull null] हमेशा एक ही ऑब्जेक्ट देता है। '==' पहचान की तुलना, मूल्य नहीं। – Tommy

+0

मैंने 'आईडी' पर कलाकार को याद किया और लंबे समय तक इस चेक को याद कर रहा था (इसे संकलक चेतावनी के कारण अनदेखा किया गया था)! धन्यवाद! – Jean

+0

बिल्कुल सही .. !! धन्यवाद –

0

आप स्पष्ट क्या आप जाँच करना चाहते हैं होना चाहिए: सरणी रिक्त है चर मौजूद नहीं है, जिसका अर्थ है:


array == nil 

या सरणी शून्य तत्व है जो आप कर सकते हैं:


[array count] == 0 
+0

'NSDictionary' वर्ग 'nil' को मान के रूप में संग्रहीत नहीं कर सकता है, इसलिए JSON पार्सर्स (और प्रॉपर्टी लिस्ट पार्सर्स) एक शून्य मान का प्रतिनिधित्व करने के लिए' [NSNull null]' का उपयोग करते हैं, क्योंकि इसमें मौजूद कुंजी के बीच कोई अंतर होता है एक शून्य मूल्य, और एक कुंजी अनुपस्थित है। –

+0

आप सही हैं। मैंने यह JSON से नहीं देखा था। – scorpiozj

+0

पहली पंक्ति सभी कहती है। –

7

आप विधि isKindOfClass: का उपयोग करके किसी ऑब्जेक्ट की कक्षा को भी देख सकते हैं। (यदि आप यह सुनिश्चित करें कि NSNull अमान्य मान का संकेत है)

if ([productIdList isKindOfClass:[NSArray class]]) 
{ 
    // value is valid 
} 

या

if([productIdList isKindOfClass:[NSNull class]]) 
{ 
    // value is invalid 
} 
+0

'NSNull' का केवल एक सिंगलटन उदाहरण है इसलिए इसे जांचने के लिए '==' का उपयोग करके यह छोटा और अधिक कुशल है। –

+0

लेकिन लौटा ऑब्जेक्ट की जांच प्रकार अधिक सुरक्षित है। – Nekto

6

आप isEqual का भी उपयोग करेंगे:

उदाहरण के लिए, आपके मामले में आप निम्न कार्य कर सकता है

if ([productIdList isEqual:[NSNull null]]) 
संबंधित मुद्दे