2011-09-13 19 views
59

मैं indexOfObject विधि के माध्यम से एक सरणी के सूचकांक प्राप्त करने का प्रयास कर रहा हूं, लेकिन जब मैं इंडेक्स का परीक्षण करने के लिए मूल्य लॉग करने का प्रयास करता हूं तो मुझे कचरा मूल्य मिलता है .. परीक्षण उद्देश्यों के लिए मुझे मूल्य {57,56,58..} के साथ एक सरणी मिल रही है के एक सूचकांक 56 कहते हैं,एनएसएआरएआरई से ऑब्जेक्ट का इंडेक्स प्राप्त करना?

NSNumber *num = [NSNumber numberWithInteger:56]; 
NSInteger Aindex = [myArray indexOfObject:num]; 
NSLog(@" %d",Aindex); 

मूल्य मैं मिल 2323421 की तरह कुछ है करने देता है। मैं संभवतः गलत क्या कर रहा हूँ ??

+0

क्या आप वास्तव में इसे सरणी में डाल रहे हैं? –

+0

** आपके myArray में किस तरह का डेटा प्रकार मान है ** –

+0

मैं एनएसएनंबर के साथ सरणी ऑब्जेक्ट को सरणी और तुलना करने के लिए एनएसएसटींग मान जोड़ रहा था .. नहीं सोचा था कि यह एक समस्या होगी लेकिन आखिरकार ऑब्जेक्ट को स्ट्रिंग के साथ तुलना करना पड़ा इसे सही करने के लिए मूल्य .. – hemant

उत्तर

134

indexOfObject द्वारा लौटाई गई अनुक्रमणिका आपके ऑब्जेक्ट के एक अवसर के लिए पहली अनुक्रमणिका होगी। isEqual विधि का उपयोग करके समानता का परीक्षण किया जाता है।
आपको प्राप्त कचरा मूल्य शायद NSNotFound के बराबर है।
इसके खिलाफ anIndex परीक्षण करने का प्रयास करें। नंबर आप देख रहे हैं अपने सरणी में शायद नहीं है:

NSNumber *num=[NSNumber numberWithInteger:56]; 
NSInteger anIndex=[myArray indexOfObject:num]; 
if(NSNotFound == anIndex) { 
    NSLog(@"not found"); 
} 

या सरणी की सामग्री के लिए लॉग इन करें सुनिश्चित रहें:

NSLog(@"%@", myArray); 
+0

मैं एनएसएनंबर के साथ सरणी ऑब्जेक्ट को सरणी और तुलना करने के लिए एक एनएसएसटींग मान जोड़ रहा था .. नहीं सोचा था कि यह एक समस्या होगी लेकिन आखिरकार ऑब्जेक्ट को स्ट्रिंग वैल्यू के साथ तुलना करने के लिए इसे सही से प्राप्त करना था .. – hemant

+1

'NSNotFound' के लिए Thx ... –

+0

यदि मेरे पास एक ही ऑब्जेक्ट एकाधिक समय है तो क्या होगा? –

0

मैं बस की जाँच की। यह मेरे लिए ठीक काम कर रहा है। जांचें कि क्या आपके सरणी में विशेष संख्या है। यदि तत्व मौजूद नहीं है तो यह इस तरह के कचरे के मूल्य वापस कर देगा।

6
NSNumber *num1 = [NSNumber numberWithInt:56]; 
    NSNumber *num2 = [NSNumber numberWithInt:57]; 
    NSNumber *num3 = [NSNumber numberWithInt:58]; 
    NSMutableArray *myArray = [NSMutableArray arrayWithObjects:num1,num2,num3,nil]; 
    NSNumber *num=[NSNumber numberWithInteger:58]; 

    NSInteger Aindex=[myArray indexOfObject:num]; 

    NSLog(@" %d",Aindex); 

इसका सही उत्पादन दे रही है, हो सकता है यू कुछ उर सरणी में वस्तुओं के भंडारण के साथ गलत किया है।

+0

अच्छी नौकरी ..... काम !! –

38

लोग,

जब एक वस्तु सरणी indexOfObject विधि एक 'कचरा' मूल्य वापस नहीं करता में नहीं मिला है। यदि आइटम नहीं मिला है तो कई सिस्टम -1 की अनुक्रमणिका लौटाते हैं।

हालांकि, आईओएस पर - क्योंकि indexOfObject एक संयुक्त हस्ताक्षर (उर्फ NSUInteger) देता है, लौटाई गई अनुक्रमणिका शून्य से अधिक या बराबर होनी चाहिए। चूंकि 'शून्य' एक मान्य इंडेक्स है, इसलिए कॉलर को इंगित करने का कोई तरीका नहीं है कि ऑब्जेक्ट नहीं मिला - सिवाय इसके कि निरंतर मूल्य पर एक सहमति वापस लौटने के अलावा हम सभी परीक्षण कर सकते हैं। इस निरंतर मूल्य पर सहमत एनएसएनओटीएफउंड कहा जाता है।

विधि:

- (NSUInteger)indexOfObject:(id)anObject; 

NSNotFound वापस आ जाएगी अगर वस्तु सरणी में नहीं था। NSNotFound एक बहुत बड़ा सकारात्मक पूर्णांक है (आमतौर पर मंच पर अधिकतम int से कम 1)।

+0

@joe यदि आप सीएमडी + NSNotFound पर क्लिक करते हैं, तो आप देखेंगे कि इसे 'enum {NSNotFound = NSIntegerMax} के रूप में परिभाषित किया गया है; '। मुझे पता है कि एनएसआईएनटेगर मैक्स और एनएसयूइन्टेरमैक्स दोनों सकारात्मक हैं, लेकिन एनएस ** यू ** इंटीजरमैक्स का उपयोग करने के लिए यह अधिक समझदार नहीं होगा क्योंकि यह एनएसयूइंटर को वापस करने वाले कार्यों में उपयोग किया जाता है? इसके अलावा, अगर मैं किसी ऑब्जेक्ट की खोज कर रहा हूं जो सरणी के इंडेक्स NSIntegerMax पर रखा गया है? क्या मुझे यह सोचने में धोखा नहीं दिया जाएगा कि वस्तु NSNotFound है? – Pwner

5

इस प्रयास करें:

NSArray के indexOfObject: विधि। निम्नलिखित के रूप में इस तरह के: यदि स्ट्रिंग @ "टेस्ट" की तरह है और आप जैसे @ खोजने के

NSUInteger fooIndex = [someArray indexOfObject: someObject]; 
0

indexOfObject methord कि सरणी में इसी स्ट्रिंग के सूचकांक मिल जाएगा "टेस्ट" अब यह एक तरह एक सूचकांक retun होगा लंबी संख्या

1

यदि आप स्विफ्ट और विकल्प का उपयोग कर रहे हैं तो सुनिश्चित करें कि वे अनचाहे हैं। आप ऑब्जेक्ट्स की अनुक्रमणिका की खोज नहीं कर सकते हैं।

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