Правильно записывает для меня "Индекс 1". Два возможных недостатка:
indexOfObject отправляет isEqual сообщения для сравнения - вы не заменили этот метод в категории?
Убедитесь, что вы тестируете NSNotFound для отказа найти, а не (скажем) 0.
Ответ 2
[array indexOfObject:object] != NSNotFound
Ответ 3
Сравнение с строковыми литералами работает только в примерах кода. В реальном мире вам часто приходится сравнивать с экземплярами NSString *, например. массив, в этом случае containsObject сбой, потому что он сравнивается с объектом, а не значением.
Вы можете добавить категорию к своей реализации, которая расширяет массив NS (Mutable) с помощью метода проверки, что он содержит строку (или любой другой тип, который вам нужно сравнить);
@implementation NSMutableArray (ContainsString)
-(BOOL) containsString:(NSString*)string
{
for (NSString* str in self) {
if ([str isEqualToString:string])
return YES;
}
return NO;
}
@end
Ответ 4
Вы также можете использовать предикат:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN %@", theArray];
BOOL result = [predicate evaluateWithObject:theString];