2012-06-07 7 views
12

मेरे पास 10 आइटम के साथ एक सरणी है। जब मैं तत्वों के लिए "IndexOfObject" कॉल नंबर 9 और तत्व संख्या 10 Xcode एक अपवाद वापसी: "NSRangeException"इंडेक्सऑफ ऑब्जेक्ट रिटर्न 2147483647

कारण: '_ [_ NSCFArray objectAtIndex:] सूचकांक: 2147483647 परे सीमा (10)'।

पिछले NSLog से, मैंने देखा कि दो तत्व सरणी में मौजूद हैं, लेकिन indexOfObject उन्हें नहीं मिल रहा। क्यूं कर?

मेरे कोड है:

NSDictionary * headConfig =[avatarDictionaryToSave objectForKey:@"head_dictionary"]; 
    NSString * headImage =[headConfig objectForKey:@"layer_key"]; 
    NSString * pathFace =[[NSBundle mainBundle]pathForResource:@"Face" ofType:@"plist"]; 
    NSLog(@"%@", headImage); 

    NSArray *arrayFace =[NSArray arrayWithContentsOfFile:pathFace]; 
    NSLog(@"the elements are: %@", arrayFace);//here headImage is present 
    int index =[arrayFace indexOfObject:headImage]; 
    NSLog(@"the index is %d", index); 
+0

जहाँ आपके कोड है ??? –

+1

आप कैसे इंडेक्स पुनर्प्राप्त कर रहे हैं? –

+1

ऐसा लगता है कि आप 'indexOfObject' और' objectAtIndex' 'के बीच भ्रमित हैं? पूर्व वस्तु को मिलेगा, जबकि उत्तरार्द्ध ने सरणी में इंडेक्स पर ऑब्जेक्ट पुनर्प्राप्त किया था? – nhahtdh

उत्तर

46

indexOfObject: रिटर्न NSNotFound जब वस्तु सरणी में मौजूद नहीं है। NSNotFound को NSIntegerMax (== 2147483647 आईओएस 32 बिट पर) के रूप में परिभाषित किया गया है।

तो ऐसा लगता है कि जिस वस्तु को आप ढूंढ रहे हैं वह बस वहां नहीं है।

+3

आपको बहुत धन्यवाद –

+5

या 64 बिट आर्किटेक्चर पर, 9 223372036854775807 लौटा रहा है। –

-1

डिफ़ॉल्ट रूप से, एक पूर्णांक पर हस्ताक्षर किए जाने पर विचार किया जाता है।

दूसरे शब्दों में संकलक मानता है कि एक पूर्णांक या सकारात्मक संख्या को स्टोर करने के लिए एक पूर्णांक चर कहा जाएगा। यह सीमा तक सीमित है कि सीमा किसी भी दिशा में पहुंच सकती है।

उदाहरण के लिए, 32-बिट int में 4,294,967,295 की एक श्रृंखला है। अभ्यास में, क्योंकि मूल्य सकारात्मक या नकारात्मक हो सकता है, सीमा वास्तव में −2,147,483,648 से +2,147,483,647 है।

यदि हम जानते हैं कि एक वैरिएबल को ऋणात्मक मूल्य को स्टोर करने के लिए कभी भी कॉल नहीं किया जाएगा, तो हम इसे बिना हस्ताक्षरित घोषित कर सकते हैं, जिससे (सकारात्मक) सीमा 0 से +4,294,967,295 तक बढ़ाई जा सकती है।

एक अहस्ताक्षरित पूर्णांक के रूप में निम्नानुसार निर्दिष्ट किया जाता है:

unsigned int myint; 
+3

यह सवाल का जवाब नहीं देता है। –