Получение индекса объекта из NSArray? - PullRequest
66 голосов
/ 13 сентября 2011

Я пытаюсь получить индекс массива с помощью метода indexOfObject следующим образом, но когда я пытаюсь зарегистрировать значение для проверки индекса, я получаю значение мусора ... для целей тестирования у меня есть массивсо значениями {57,56,58..}, чтобы получить индекс, скажем, 56,

NSNumber *num = [NSNumber numberWithInteger:56];
NSInteger Aindex = [myArray indexOfObject:num];
NSLog(@" %d",Aindex);

значение, которое я получаю, является чем-то вроде 2323421.Что я, возможно, делаю неправильно ??

Ответы [ 7 ]

143 голосов
/ 13 сентября 2011

Индекс, возвращаемый indexOfObject, будет первым индексом для вхождения вашего объекта.Равенство проверяется с использованием метода isEqual.
Получаемое вами значение мусора, вероятно, равно NSNotFound.
Попробуйте проверить anIndex против него.Номер, который вы ищете, вероятно, не находится в вашем массиве:

NSNumber *num=[NSNumber numberWithInteger:56];
NSInteger anIndex=[myArray indexOfObject:num];
if(NSNotFound == anIndex) {
    NSLog(@"not found");
}

или зарегистрируйте содержимое массива, чтобы быть уверенным:

NSLog(@"%@", myArray);
39 голосов
/ 26 января 2013

Folks,

Когда объект не найден в массиве, метод indexOfObject НЕ возвращает значение «мусора».Многие системы возвращают индекс -1, если элемент не найден.

Однако в IOS - поскольку indexOfObject возвращает UNSIGNED int (он же NSUInteger), возвращаемый индекс должен быть больше или равен нулю.Так как «ноль» является действительным индексом, нет никакого способа указать вызывающей стороне, что объект не был найден - кроме как путем возвращения согласованного постоянного значения, которое мы все можем проверить.Это согласованное постоянное значение называется NSNotFound.

Метод:

- (NSUInteger)indexOfObject:(id)anObject;

вернет NSNotFound, если объект не был в массиве.NSNotFound - очень большое ПОЛОЖИТЕЛЬНОЕ целое число (обычно 1 минус максимальное значение int на платформе).

6 голосов
/ 13 сентября 2011
NSNumber *num1 = [NSNumber numberWithInt:56];
    NSNumber *num2 = [NSNumber numberWithInt:57];
    NSNumber *num3 = [NSNumber numberWithInt:58];
    NSMutableArray *myArray = [NSMutableArray arrayWithObjects:num1,num2,num3,nil];
    NSNumber *num=[NSNumber numberWithInteger:58];

    NSInteger Aindex=[myArray indexOfObject:num];

    NSLog(@" %d",Aindex);

Это дает правильный вывод, возможно, вы сделали что-то не так с сохранением объектов в массиве ur.

5 голосов
/ 02 марта 2016

Попробуйте это:

метод NSArray indexOfObject:. Таких как следующее:

NSUInteger fooIndex = [someArray indexOfObject: someObject];
1 голос
/ 25 апреля 2017

Если вы используете Swift и дополнительные устройства, убедитесь, что они развернуты.Вы не можете искать в индексе объектов, которые являются необязательными.

0 голосов
/ 02 июня 2016

indexOfObject methord получит индекс соответствующей строки в этом массиве, если строка похожа на @ "Test", а вы найдете как @ "TEST". Теперь это вернет индекс как длинное число

0 голосов
/ 13 сентября 2011

Я только что проверил.Это работает нормально для меня.Проверьте, имеет ли ваш массив конкретный номер.Он вернет такие значения мусора, если элемент отсутствует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...