Подтвердить что ты не робот

Тестирование, если NSMutableArray содержит строковый объект

У меня есть NSMutableArray, который содержит несколько объектов NSString. Как проверить, содержит ли массив конкретный строковый литерал?

Я пробовал [array containsObject:@"teststring"], но это не работает.

4b9b3361

Ответ 1

То, что вы делаете, должно работать нормально. Например

NSArray *a = [NSArray arrayWithObjects:@"Foo", @"Bar", @"Baz", nil];
NSLog(@"At index %i", [a indexOfObject:@"Bar"]);

Правильно записывает для меня "Индекс 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];

Ответ 5

для каждого объекта

[(NSString *) [array objectAtIndex:i] isEqualToString:@"teststring"];