Получение индекса объекта из NSArray?
Я пытаюсь получить индекс массива с помощью метода indexOfObject следующим образом, но когда я пытаюсь записать значение для проверки индекса, я получаю значение мусора. Для целей тестирования у меня есть массив со значениями {57,56,58..}
, чтобы получить индекс let say 56
,
NSNumber *num = [NSNumber numberWithInteger:56];
NSInteger Aindex = [myArray indexOfObject:num];
NSLog(@" %d",Aindex);
значение, которое я получаю, похоже на 2323421
. что я могу сделать неправильно?
Ответы
Ответ 1
Индекс, возвращаемый indexOfObject
, будет первым индексом для возникновения вашего объекта. Равенство проверяется с использованием метода isEqual
.
Выбранное значение мусора, вероятно, равно NSNotFound
.
Попробуйте протестировать anIndex
против него. Количество, которое вы ищете, вероятно, не находится в вашем массиве:
NSNumber *num=[NSNumber numberWithInteger:56];
NSInteger anIndex=[myArray indexOfObject:num];
if(NSNotFound == anIndex) {
NSLog(@"not found");
}
или запишите содержимое массива:
NSLog(@"%@", myArray);
Ответ 2
Люди,
Когда объект не найден в массиве, метод indexOfObject НЕ возвращает значение "мусор". Многие системы возвращают индекс -1, если элемент не найден.
Однако в IOS - поскольку indexOfObject возвращает UNSIGNED int (aka NSUInteger), возвращаемый индекс должен быть больше или равен нулю. Поскольку "нуль" является допустимым индексом, нет способа указать вызывающему, что объект не был найден - за исключением возврата согласованного постоянного значения, которое все мы можем проверить. Эта постоянная согласованная ценность называется NSNotFound.
Метод:
- (NSUInteger)indexOfObject:(id)anObject;
вернет NSNotFound, если объект не был в массиве. NSNotFound - очень большое ПОЗИТИВНОЕ целое число (обычно 1 минус максимальное значение int на платформе).
Ответ 3
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.
Ответ 4
Попробуйте следующее:
Метод NSArray indexOfObject:
. Например:
NSUInteger fooIndex = [someArray indexOfObject: someObject];
Ответ 5
Если вы используете Swift и опции, убедитесь, что они распакованы. Вы не можете искать индекс объектов, которые являются необязательными.
Ответ 6
Я только что проверил. Его работа прекрасна для меня. Проверьте, имеет ли ваш массив определенный номер. Он вернет такие значения мусора, если элемент отсутствует.
Ответ 7
indexOfObject methord получит индекс соответствующей строки в этом массиве, если строка похожа на @ "Test", и вы найдете ее как "TEST". Теперь это будет переназначать индекс, как длинное число