2012-06-07 13 views
12

Ich habe ein Array mit 10 Elementen. Wenn I "IndexOfObject" für die Elemente Nummer 9 und die Elementnummer 10 Xcode Rück eine Ausnahme nennen: "NSRangeException"IndexOfObject return 2147483647

Grund: '_ [_ NSCFArray objectAtIndex:] Index: 2147483647 über Grenzen (10)'.

Von einer früheren NSLog, sah ich, dass die beiden Elemente in dem Array vorhanden, aber indexOfObject sie nicht finden. Warum?

Mein Code ist:

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

wo ist dein Code ??? –

+1

Wie Sie den Index abrufen? –

+1

Es scheint, dass Sie zwischen 'indexOfObject' und' objectAtIndex' verwirren? Ersteres wird das Objekt finden, während letzteres das Objekt am Index im Array abruft. – nhahtdh

Antwort

46

indexOfObject: kehrt NSNotFound, wenn das Objekt in dem Array nicht vorhanden ist. NSNotFound ist definiert als NSIntegerMax (== 2147483647 auf iOS 32 Bit).

So scheint es, dass das Objekt, das Sie suchen, einfach nicht da ist.

+3

Vielen Dank –

+5

Oder auf 64-Bit-Architektur, die Rückkehr 9223372036854775807. –

-1

Standardmäßig wird eine Ganzzahl als signiert angenommen.

Mit anderen Worten nimmt der Compiler an, dass eine Integer-Variable aufgerufen wird, um entweder eine negative oder eine positive Zahl zu speichern. Dies begrenzt das Ausmaß, in dem die Reichweite in beide Richtungen reichen kann. Beispiel: Ein 32-Bit-Int hat einen Bereich von 4,294,967,295. Da der Wert in der Praxis positiv oder negativ sein kann, ist der Bereich tatsächlich −2,147,483,648 bis +2,147,483,647.

Wenn wir wissen, dass eine Variable niemals zum Speichern eines negativen Werts aufgerufen wird, können wir sie als unsigned deklarieren und damit den (positiven) Bereich auf 0 auf +4,294,967,295 erweitern.

Ein unsigned int wird wie folgt angegeben:

unsigned int myint; 
+3

Dies beantwortet die Frage nicht. –