Как загрузить Plist в несколько табличных представлений - PullRequest
1 голос
/ 19 марта 2011

Я создал data.plist и хочу загрузить корневой массив (имена) в табличное представление, а затем, когда вы нажмете на каждую ячейку, он загрузит соответствующий им массив упражнений в новое табличное представление.Как мне реализовать этот метод в моем TableViewController?

Мой текущий plist имеет корневой массив с элементом словаря для каждой группы мышц (элемент 0, затем имя ребенка), а затем содержит массив для упражнений мышцы.

Мой метод didSelectRowAtIndexPath дляПервая таблица, которая выдвигает подтаблицу 2-го представления:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    ExerciseTableViewController *detailViewController = [[ExerciseTableViewController alloc] initWithNibName:@"AbdominalTableViewController" bundle:nil];
    [self.navigationController pushViewController:detailViewController animated:YES];
    [detailViewController release];

Мой метод viewDidLoad для контроллера 2-го представления таблицы (это необходимо исправить):

- (void)viewDidLoad

if (exerciseArray == nil)
{
    NSString *path = [[NSBundle mainBundle]pathForResource:@"biceps" ofType:@"plist"];
    NSMutableArray *array = [[NSMutableArray alloc]initWithContentsOfFile:path];
    self.exerciseArray = array;
    [array release];

1 Ответ

0 голосов
/ 19 марта 2011

Предполагая, что я понимаю ваш вопрос.

Вы можете сделать что-то вроде:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *muscle = [muscles objectAtIndex:indexPath.row];  //'muscles' array is the first level of your plist
    ...
    ExerciseTableViewController *detailViewController = [[ExerciseTableViewController alloc] initWithNibName:muscle bundle:nil];

    detailViewController.muscle = muscle;

    [self.navigationController pushViewController:detailViewController animated:YES];
    [detailViewController release];
    ...
}

И во втором контроллере:

    ...
    NSString *path = [[NSBundle mainBundle]pathForResource:@"biceps" ofType:@"plist"];
    NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
    self.exerciseArray = [plistDict objectForKey:muscle];   //'muscle' is the string you set in the previous controller
    [plistDict release];
    ...

Надеюсь, это поможет.

Редактировать после комментария Фейсала:

Используя следующий файл списка: Data.plist Для чтения этого списка вы можете сделать:

//Read the plist file into an array (the root element is an array)
NSString *path = [[NSBundle mainBundle]pathForResource:@"Data" ofType:@"plist"];
NSArray *rootLevel = [[NSMutableArray alloc]initWithContentsOfFile:path];

Затем дляпрочитайте второй уровень, содержимое 'rootLevel':

NSDictionary *secondLevel = [rootLevel objectAtIndex:0];
NSString *muscle = [secondLevel valueForKey:@"name"];    //"Biceps" string
NSArray *exercises = [secondLevel valueForKey:@"exercises"];    //[exercises objectAtIndex:0] is "Biceps Curl" string
...