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