Выполнение проверки кода, чтобы увидеть, соответствует ли текст в текстовом поле какой-либо из строк в NSArray - PullRequest
0 голосов
/ 01 сентября 2009

Я пытаюсь заставить мое приложение проверять текст в текстовом поле и проверять, соответствует ли оно какой-либо из строк в NSArray. Я надеюсь, что вы могли бы указать мне правильное направление или дать мне код, чтобы сделать это. Я почти уверен, что мне нужно использовать оператор if. Спасибо!

Ответы [ 2 ]

3 голосов
/ 01 сентября 2009

Отправляет сообщение containsObject: в массив, передавая строку, которую вы хотите проверить. Этот метод будет использовать isEqual: сообщения для сравнения вашей строки с каждым объектом в массиве. Сообщение вернет BOOL, которое вы можете проверить в вашем if утверждении.

Если вам нужно более сложное определение «соответствия», чем поиск равной строки, вам нужно самостоятельно зациклить массив и выполнить желаемый тест для каждого объекта в массиве по одному.

Также учтите, что сравнения isEqual: / isEqualToString: чувствительны к регистру: @"foo" не равно @"Foo". Если вы хотите сравнивать без учета регистра или с учетом локали, вам нужно будет выполнить цикл для массива самостоятельно и использовать один из других методов сравнения NSString.

2 голосов
/ 01 сентября 2009

Утверждение «если» - довольно хорошее предположение! - один из основных принципов (если не основной принцип) всех языков программирования ...

Существует 101 способ сделать это, поэтому вы, вероятно, получите кучу ответов.

По сути, вы хотите сделать следующее:

  1. Создайте NSEnumerator, который позволит вам шагать по массиву
  2. Перебрать этот перечислитель
  3. Проверять содержимое массива каждый раз

Обратите внимание, что есть и другие подходы, в том числе использование так называемого "быстрого перечисления", но я оставлю вас читать их самостоятельно.

Хорошо, теперь время для примера кода:

NSEnumerator *enumerator;
enumerator = [myArray objectEnumerator];  // myArray is what we're checking
NSString *stringContents;

while (stringContents = [enumerator nextObject]) {   // Cycles through array
    if ([stringContents isEqualToString:@"SOMETHING"]) {
        // We have a match!  Call a method or something...  
    }
}

Как я уже сказал, есть много других способов сделать это, но, надеюсь, это поможет вам начать!

Редактировать: Если вы хотите просмотреть несколько элементов, например textField1, textField2 и textField3, ваш код может выглядеть следующим образом (|| - это символ для логического «ИЛИ»):

if ([stringContents isEqualToString:textField1.text] || 
    [stringContents isEqualToString:textField2.text] ||
    [stringContents isEqualToString:textField3.text]) {

Это будет иметь значение true, если какое-либо из трех textFields соответствует содержимому вашего массива. Если вы хотите оценить значение true, если ВСЕ ваши утверждения совпадают, поменяйте местами || для &&.

Edit 2: Если вы хотите сравнить несколько множеств NSArrays, имеет смысл поместить перечисление и сравнение массива в отдельный метод, который принимает массив и строку и, возможно, возвращает BOOL, зависящий от было ли найдено совпадение:

Новый метод:

-(BOOL)checkArray:(NSArray *)myArray forString:(NSString *)myString {
  NSEnumerator *enumerator;
  enumerator = [myArray objectEnumerator];
  NSString *stringContents;

  while (stringContents = [enumerator nextObject]) {   // Cycles through array
    if ([stringContents isEqualToString:myString]) {
        return YES; 
    }
  }
  return NO;
}

И затем вы можете вызвать это для нескольких массивов:

BOOL result1 = [self checkArray:array1 forString:textField.text];
BOOL result2 = [self checkArray:array2 forString:textField.text];
// Etc...

Надеюсь, что все поможет! ...

Редактировать 3: Если вам нужно заполнить массивы поисковыми терминами, для этого есть удобный способ:

NSArray *myArray = [NSArray arrayWithObjects:@"Item 1",@"Item 2", nil];

Обратите внимание на пару важных вещей: каждому элементу предшествует символ @, если его текст в кавычках, а последним элементом всегда должно быть слово nil . Вы можете положить столько (сколько угодно) предметов, сколько захотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...