2015-04-10 4 views
-1

Мой NSDictionary получает только первый массив в словаре. Я понятия не имею, почему это так.NSDictionary Поиск

Здесь поиск

//Loop through the DataDictionary for ORIGIN and DESTINATION 
    for (NSMutableDictionary *floors in [MapData allfloors]){ 
     //Check if found then set roomListTxt and defaultImage from the Dictionary values 
     if ([floors[ORIGIN] isEqualToString:origin] && [floors[DESTINATION] isEqualToString:destination]) { 
      searchResults.roomListTxt = floors[DESTINATION_ROOMS]; 
      searchResults.defaultImage = floors[MAP_IMAGE]; 
      [self.navigationController pushViewController:searchResults animated:YES]; 
      //break; 
     } else { 
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Oops!!" message:@"Working to add more routes." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; 
      [alert show]; 
      break; 
     } 
    } 

Вот определение Словаря

NSDictionary *d1Dictionary = @{ORIGIN : @"A1", 
           DESTINATION : @"D1", 
           ORIGIN_ROOMS : @"A101, A102, A113", 
           DESTINATION_ROOMS : @"D100, D100C, D101, D102, D103, D105, D107, D111, D113", 
           MAP_IMAGE : [UIImage imageNamed:@"A1-D1.png"]}; 
[floorsInformation addObject:d1Dictionary]; 

NSDictionary *d2Dictionary = @{ORIGIN : @"A1", 
           DESTINATION : @"M1", 
           ORIGIN_ROOMS : @"A101, A102, A113", 
           DESTINATION_ROOMS : @"M104, M105, M106, M107", 
           MAP_IMAGE : [UIImage imageNamed:@"A1-M1.png"]}; 
[floorsInformation addObject:d2Dictionary]; 

Входные параметры от 'происхождения' и 'назначения' равны "полы [ORIGIN] "и" полы [DESTINATION] "соответственно.

+0

Там нет «Массивы» в любом из словарей вы показать выше. –

+0

И вам действительно нужно изучить основные принципы программирования, прежде чем решать Objective-C. –

+0

Словарь выше хранится в массиве ... ??? – thurpe

ответ

0

Ваш блок else находится внутри цикла. Он показывает только первый результат, потому что во втором цикле ваше состояние оценивается как NO, вызывая предупреждение и команду break.

Вы можете проверить это, установив точку останова и выполнив код. Вы можете решить проблему, проверив соответствующие данные до или после цикла итерации, в зависимости от вашей функции приложения.

Например:

for (NSMutableDictionary *floors in [MapData allfloors]){ 
    //Check if found then set roomListTxt and defaultImage from the Dictionary values 
    if ([floors[ORIGIN] isEqualToString:origin] && [floors[DESTINATION] isEqualToString:destination]) { 
     searchResults.roomListTxt = floors[DESTINATION_ROOMS]; 
     searchResults.defaultImage = floors[MAP_IMAGE]; 
     [self.navigationController pushViewController:searchResults animated:YES]; 
     return; 
    } 
} 


// due to the 'return' statement, this code won't get called if a match is made 
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Oops!!" message:@"Working to add more routes." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; 
[alert show]; 
+0

Я добавил точку останова, и она извлекала объекты массива ... Именно в этот момент я решил опубликовать его здесь ... Я понимаю, что вы имеете в виду. Я знал, что цикл for вызывает неисправность, я просто не знал, как это вызвало это. Кроме того, требуются данные, которые мне нужны, в цикле, как мне «проверять» возвращенный массив, когда он находится вне цикла? Спасибо за помощь. – thurpe

+0

Я понятия не имею, что вы пытаетесь сделать, поэтому я не знаю, что вам сказать о том, как его проверить. Можете ли вы описать, что должна делать эта функция? –

+0

У меня есть словари, хранящиеся в массиве, и если пользователь вводит значения в учебнике, он должен искать массив словарей и создавать некоторые переменные из значений в словаре. Это о суммировании. – thurpe

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