Проверьте, существует ли что-то в NSMutableArray
У меня есть NSMutableArray, который может содержать несколько объектов. Я хотел бы проверить, существует ли объект, и если да, измените его. Мне было интересно проверить его. Я думал, что это сработает:
if ([[[self.myLibrary objectAtIndex:1] subObject] objectAtIndex:1]) // do something
Однако это приведет к сбою, если в индексе 1 нет каких-либо субъектов.
Поэтому я думаю, проблема заключается в том, что вышеупомянутое не возвращает ниль, если в этом Индексе нет ничего.
Есть ли еще один простой способ проверить или мне придется подсчитывать массив и т.д.? Я знаю, что есть другие сообщения в stackoverflow, но я еще не нашел простой ответ.
Любые объяснения/предложения приветствуются. Спасибо!
Ответы
Ответ 1
Без проверки просто:
[myArray indexOfObject:myObject];
или
[myArray containsObject:myObject];
Эти методы проверяют каждый объект с помощью isEqual
.
Например:
NSUInteger objIdx = [myArray indexOfObject: myObject];
if(objIdx != NSNotFound) {
id myObj = [myArray objectAtIndex: objIdx];
// Do some alter stuff here
}
Ответ 2
Если это шаблон, который вы используете много, вы можете добавить категорию в NSArray, называемую чем-то вроде safeObjectAtIndex:
, который принимает индекс, проверяет границы внутри:
-(id)safeObjectAtIndex:(NSUInteger)index {
if (index >= [self count])
return nil;
return [self objectAtIndex:index];
}
Ответ 3
Предполагая, что объект, который вы используете для поиска, и фактический объект в массиве - это тот же самый экземпляр, а не два разных объекта, которые равны в соответствии с переопределенным методом isEqual:
, вы можете сделать это:
if ([array containsObject:objectToSearchFor]) {
// modify objectToSearchFor
}
Если два объекта являются разными экземплярами, равными в соответствии с isEqual:
, вам нужно будет использовать такой код:
NSUInteger index = [array indexOfObject:objectToSearchFor];
if (index != NSNotFound) {
id objectInArray = [array objectAtIndex:index];
// modify objectInArray
}
Ответ 4
NSArray (это суперкласс класса NSMUtableArray) имеет множество методов для поиска объектов. Посмотрите documentation.
Вы можете либо положиться на метод equals (например, indexOfObject:), либо предоставить блок (например, indexOfObjectPassingTest:), который довольно напуган.
В Objective C довольно часто используется версия Mutable класса, но полагаются на методы в непеременном суперклассе, поэтому всегда полезно при проверке онлайн-документации смотреть на суперкласс.