Ответ 1
indexOfObject:
возвращает NSNotFound
, когда объект отсутствует в массиве. NSNotFound
определяется как NSIntegerMax
(== 2147483647 на iOS 32 бит).
Итак, кажется, что объект, который вы ищете, просто не существует.
У меня есть массив с 10 элементами. Когда я вызываю "IndexOfObject
" для элементов номер 9, а номер элемента X Xode возвращает исключение: "NSRangeException
"
reason: '_ [_ NSCFArray objectAtIndex:] index: 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);
indexOfObject:
возвращает NSNotFound
, когда объект отсутствует в массиве. NSNotFound
определяется как NSIntegerMax
(== 2147483647 на iOS 32 бит).
Итак, кажется, что объект, который вы ищете, просто не существует.
По умолчанию предполагается, что целое число будет подписано.
Другими словами, компилятор предполагает, что целочисленная переменная будет вызываться для сохранения отрицательного или положительного числа. Это ограничивает то, что диапазон может достигать в любом направлении.
Например, 32-битный int имеет диапазон 4,294,967,295
. На практике, поскольку значение может быть положительным или отрицательным, диапазон фактически равен от −2,147,483,648
до +2,147,483,647
.
Если мы знаем, что переменная никогда не будет вызвана для хранения отрицательного значения, мы можем объявить ее как unsigned, тем самым расширяя (положительный) диапазон до 0
до +4,294,967,295
.
Беззнаковый int задается следующим образом:
unsigned int myint;