Получение индекса объекта из 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". Теперь это будет переназначать индекс, как длинное число