IndexOfObject возврат 2147483647
У меня есть массив из 10 предметов. Когда я звонюIndexOfObject
"Для элементов с номером 9 и элемента с номером 10 Xcode возвращает исключение:"NSRangeException
"
причина: '_[_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);
3 ответа
indexOfObject:
возвращается NSNotFound
когда объект отсутствует в массиве. NSNotFound
определяется как NSIntegerMax
(== 2147483647 на iOS 32 бит).
Таким образом, кажется, что объект, который вы ищете, просто не существует.
Please change the coding of adding the array values as I mentioned below.
// [arr_values addObject:[dictionary valueForKey:@"Name"]];
[arr_values addObject:[NSString stringWithFormat:@"%@",[dictionary valueForKey:@"Name"]]];
When target array elements are not in string format then while we using the
indexOfObject then that value can't able to find in the target array. So please try to
change the value of object as mentioned above while adding into array.
По умолчанию целое число считается подписанным.
Другими словами, компилятор предполагает, что для хранения либо отрицательного, либо положительного числа будет вызвана целочисленная переменная. Это ограничивает степень, в которой диапазон может достигать в любом направлении.
Например, 32-битное int имеет диапазон 4,294,967,295
, На практике, поскольку значение может быть положительным или отрицательным, диапазон на самом деле −2,147,483,648
в +2,147,483,647
,
Если мы знаем, что переменная никогда не будет вызываться для хранения отрицательного значения, мы можем объявить ее беззнаковой, тем самым расширив (положительный) диапазон до 0
в +4,294,967,295
,
Целое число без знака указывается следующим образом:
unsigned int myint;