2014-09-25 1 views
-1

Я пытаюсь выполнить итерацию через NSMutableArray, который содержит переменные @"yes" и @"no"NSString значения. Массив содержит значения 5 @"yes". Тем не менее, когда я распечатываю значения индекса местоположения, который он ищет в массиве, он продолжает возвращать то, что первый экземпляр @"yes" находится в массиве self.allFavorites - независимо от порядка NSMutableArray. Почему это?NSMutableArray For-In Search Возвращаемое первое значение найдено

for (NSString *favoriteObject in self.allFavorites) 
{ 
    NSUInteger index = [self.allFavorites indexOfObject:favoriteObject]; 

    if ([favoriteObject isEqual:@"yes"]) 
    { 
     [self.favoriteNames addObject:[self.allNames objectAtIndex:index]]; 

     NSLog(@"index: %i", index); 
    } 
} 

Консоль печатает:

2014-09-24 21:23:12.136 AppName[526:87372] index: 2 
2014-09-24 21:23:12.136 AppName[526:87372] index: 2 
2014-09-24 21:23:12.137 AppName[526:87372] index: 2 
2014-09-24 21:23:12.137 AppName[526:87372] index: 2 
2014-09-24 21:23:12.137 AppName[526:87372] index: 2 
+0

Этот это явно задокументированное поведение индекса indexOfObject: ' –

+0

indexOf найдет первый. Как бы он знал, в какую итерацию вы находитесь. Вам нужно как-то подсчитать итерации самостоятельно - возможно, лучше всего просто «for» (int i = 0; i

ответ

0

Код размещен проходит через каждый элемент в массиве, для каждого элемента он задает массив для первого вхождения некоторой строки. Он будет искать тот же самый индекс каждый раз.

Вот то, что вы хотите (перебирать массив и следить за индексом самостоятельно):

NSUInteger index = 0; 
for (NSString *favoriteObject in self.allFavorites) { 
    if ([favoriteObject isEqualToString:@"yes"]) { 
     [self.favoriteNames addObject:favoriteObject]; 
     NSLog(@"index: %i", index); 
    } 
    index++; 
} 

В качестве альтернативы, считай через индексы, и захватить каждый пункт, как вы идете:

for (NSInteger index=0; index<self.allFavorites.count; index++) { 
    NSString *favoriteObject = self.allFavorites[index]; 
    if ([favoriteObject isEqualToString:@"yes"]) { 
     [self.favoriteNames addObject:favoriteObject]; 
     NSLog(@"index: %i", index); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^