Подтвердить что ты не робот

IndexOfObject return 2147483647

У меня есть массив с 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);
4b9b3361

Ответ 1

indexOfObject: возвращает NSNotFound, когда объект отсутствует в массиве. NSNotFound определяется как NSIntegerMax (== 2147483647 на iOS 32 бит).

Итак, кажется, что объект, который вы ищете, просто не существует.

Ответ 2

По умолчанию предполагается, что целое число будет подписано.

Другими словами, компилятор предполагает, что целочисленная переменная будет вызываться для сохранения отрицательного или положительного числа. Это ограничивает то, что диапазон может достигать в любом направлении.

Например, 32-битный int имеет диапазон 4,294,967,295. На практике, поскольку значение может быть положительным или отрицательным, диапазон фактически равен от −2,147,483,648 до +2,147,483,647.

Если мы знаем, что переменная никогда не будет вызвана для хранения отрицательного значения, мы можем объявить ее как unsigned, тем самым расширяя (положительный) диапазон до 0 до +4,294,967,295.

Беззнаковый int задается следующим образом:

unsigned int myint;