Хотя цикл работает, но не оператор if? - PullRequest
1 голос
/ 29 сентября 2010

У меня есть этот while цикл в моем коде. Цикл, кажется, работает нормально, так как я напечатал свой i++ в консоли. Но по какой-то причине он только проверяет мое утверждение if в первый раз. Я могу добавить только один заголовок в NSMutableArray с именем sectionZeroTitleArray. У меня есть много массивов в этом цикле, так что это может сбить с толку. Я сделаю все возможное, чтобы объяснить.

Вот что я пытаюсь сделать: Цикл по длине массива (topicArray). Если массив (topicArray) совпадает с первым объектом этого другого массива (anotherArray), то добавьте объект, имеющий тот же индекс (titleArray), что и topicArray, в новый MutableArray (sectionZeroTitleArray).

Я уверен, что сделал что-то глупое, может, кто-то, кто не смотрел на это весь день, может меня поправить? Пожалуйста и спасибо.

while (i < (topicArray.count)) {
  if ([topicArray objectAtIndex:i] == [anotherArray objectAtIndex:0]) {
   [sectionZeroTitleArray addObject:[titleArray objectAtIndex:i]];
  }
  NSLog(@"sectionZeroLoopCount: %d", i);
  i++;
 }

Ответы [ 2 ]

5 голосов
/ 29 сентября 2010

Вы проверяете равенство указателей при использовании ==. Вы уверены, что хотите это сделать? Какой тип вы ожидаете? Если это NSString, используйте isEqualToString:, в противном случае используйте NSObject isEqual: метод:

Если ожидаемый тип - NSString:

if([[topicArray objectAtIndex:i] isEqualToString:[anotherArray objectAtIndex:0]]) {
   //...
}

В противном случае вам, вероятно, следует сделать следующее:

if([[topicArray objectAtIndex:i] isEqual:[anotherArray objectAtIndex:0]]) {
   //...
}
1 голос
/ 29 сентября 2010

Да, вы сравниваете указатели, а не значения.Посмотрите документацию NSString, в частности метод isEqualToString: для сравнения строк.

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