Нужна помощь в создании словаря из plist - PullRequest
1 голос
/ 16 октября 2011

У меня есть следующий формат в моем списке:

enter image description here

Я использую этот код, который отлично работает, чтобы вытащить все muscleName и установить их как textLabel ячейки таблицы:

    NSString *path = [[NSBundle mainBundle]pathForResource:@"data" ofType:@"plist"];
    NSMutableArray *rootLevel = [[NSMutableArray alloc]initWithContentsOfFile:path];
    self.muscleArray = rootLevel;
    cell.textLabel.text = [[self.muscleArray objectAtIndex:indexPath.row]objectForKey:@"muscleName"];

Но теперь я добавляю строку поиска и хочу, чтобы в результатах отображались exerciseName с соответствующими клавишами muscleName и musclePicture.

Я пытался просто сделать [[self.muscleArray objectAtIndex:indexPath.row]objectForKey:@"exerciseName"];, но ничего не получилось

1 Ответ

1 голос
/ 16 октября 2011
[[self.muscleArray objectAtIndex:indexPath.row]objectForKey:@"exercises"] 

Даст вам NSArray, содержащий два словаря (из данных выше), каждый словарь содержит строку для ключа exerciseName. Вы также можете сделать

[[[self.muscleArray objectAtIndex:indexPath.row]objectForKey:@"exercises"] valueForKey:@"exerciseName"]

, который вернет вам NSArray из NSStrings с двумя именами упражнений.

Ваши данные на самом деле не выложены так, чтобы облегчить поиск. Вы пытаетесь искать в словаре, содержащемся в массиве, содержащемся в словаре, содержащемся в массиве! Возможно, стоит создать альтернативный массив для поиска - это можно сделать примерно так:

NSMutableArray *arrayForSearching = [NSMutableArray array];
for (NSDictionary *muscleDict in self.muscleArray)
    for (NSDictionary *excerciseDict in [muscleDict objectForKey:@"exercises"])
        [arrayForSearching addObject:[NSDictionary dictionaryWithValuesAndKeys:
            [exerciseDict objectForKey:@"exerciseName"],@"exerciseName",
            [muscleDict objectForKey:@"muscleName"],@"muscleName",nil]];

(набрано в браузере и не проверено, поэтому, пожалуйста, простите за любые ошибки!)

...