2012-06-07 9 views
12

Tengo una matriz con 10 elementos. Cuando llamo "IndexOfObject" para los elementos de número 9 y el elemento número 10 Xcode devolver una excepción: "NSRangeException"IndexOfObject return 2147483647

razón: '_ [_ NSCFArray objectAtIndex:] Índice: 2147483647 allá límites (10)'.

Desde el anterior NSLog, he visto que existen los dos elementos de la matriz, pero indexOfObject no los encuentra. ¿Por qué?

Mi código es:

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

dónde está su código ??? –

+1

¿Cómo está recuperando el índice? –

+1

Parece que está confundiendo entre 'indexOfObject' y' objectAtIndex'? ¿El primero encontrará el objeto, mientras que el segundo recuperará el objeto en el índice de la matriz? – nhahtdh

Respuesta

46

indexOfObject: rendimientos NSNotFound cuando el objeto no está presente en la matriz. NSNotFound se define como NSIntegerMax (== 2147483647 en iOS 32 bit).

Parece que el objeto que está buscando simplemente no está allí.

+3

Muchas gracias –

+5

O en la arquitectura de 64 bits, que devuelve 9223372036854775807. –

-1

De forma predeterminada, se supone que un entero está firmado.

En otras palabras, el compilador supone que una variable entera será llamada para almacenar un número negativo o positivo. Esto limita la extensión que el alcance puede alcanzar en cualquier dirección.

Por ejemplo, un int de 32 bits tiene un rango de 4,294,967,295. En la práctica, dado que el valor puede ser positivo o negativo, el rango es en realidad −2,147,483,648 a +2,147,483,647.

Si sabemos que nunca se pedirá a una variable que almacene un valor negativo, podemos declararlo como no firmado, extendiendo así el rango (positivo) a 0 a +4,294,967,295.

Un entero sin signo se especifica de la siguiente manera:

unsigned int myint; 
+3

Esto no responde la pregunta. –