2014-09-24 13 views
-3

Я довольно новичок в xcode/object-c, и теперь я сталкиваюсь с проблемой.Objective-C выберите часть массива

В моем приложении у меня есть массив Json, принимающий с моего сервера, я отправляю массив во второй элемент управления через segue. Все идет правильно.

В моем secondViewController я получаю массив и выбираю часть, в которой я нуждался;

self.excersiseSection = [self.schemeData objectForKey:@"user_excersise_sections"]; 

Это выводит часть массива, который я нажал на этот контроллер, так что все в порядке. Теперь я хочу, чтобы выбрал вложенный массив упражнений (для печати ячеек таблицы) в этом массиве. Я попытался сделать это, как код выше с помощью «упражнений» индекса, но без успеха.

{ 
    "user_training_days": [ 
     { 
      "day_id": 1, 
      "day_name": "Monday", 
      "training": "trainingsdag", 
      "user_excersise_sections": [ 
       { 
        "section_title": "Legs", 
        "exercises": [ 
         { 
          "exercise_title": "Leg press", 
          "excercise_sets": "4", 
          "excercise_reps": "12", 
         } 
        ] 
       },...etc 
+0

'user_excersise_sections' содержит массив словарей, поэтому вы можете иметь более одного массива упражнений. Как вы с этим справитесь? – Droppy

+0

Истинно, при необходимости я могу перестроить массив jSon, если он делает вещи более простыми. То, что я пытаюсь достичь, - это получить упражнения в массиве, чтобы я мог их распечатать в TableViewCell – directory

+0

@Freshtea см. Мое редактирование – l0gg3r

ответ

1

Вот пример кода, который будет перебирать над JSON, и просто распечатать его

for (NSDictionary *section in excersiseSection) { 
     NSLog(@"--- section_title: %@", section[@"section_title"]); 
     for (NSDictionary *excercise in section[@"exercises"]) { 
      NSLog(@"----- exercise_title: %@", excercise[@"exercise_title"]); 
      NSLog(@"----- excercise_sets: %@", excercise[@"excercise_sets"]); 
      NSLog(@"----- excercise_reps: %@", excercise[@"excercise_reps"]); 
     } 
} 

Это должно помочь вам, чтобы построить свой TableView.

EDIT:
Здесь представляет собой комплексное решение, чтобы сделать ваше Tableview.
1) Создайте TableViewController в strotybaord и назначьте пользовательский класс в раскадровке.
2) Вставьте под код в классе
3) Вы готовы к работе! :)

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return self.excersiseSection.count; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [self.excersiseSection[section][@"exercises"] count]; 
} 

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{ 
    return self.excersiseSection[section][@"section_title"]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"Cell"]; 
    if (!cell) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"]; 
    } 
    NSDictionary *excercise = self.excersiseSection[indexPath.section][@"exercises"][indexPath.row]; 
    cell.textLabel.text = excercise[@"title"]; 
    cell.detailTextLabel.text = [NSString stringWithFormat:@"Sets: %@, Reps: %@", 
           excercise[@"excercise_sets"], excercise[@"excercise_reps"]]; 
    return cell; 
} 
+0

Большое спасибо! Я проверил код (он создает журнал в порядке) и попытался реализовать его в моей функции UITableViewCell, но я думаю, мне нужна дополнительная помощь, чтобы выяснить, как на самом деле распечатать их в ячейке. Не самый простой массив для начинающего, я думаю :) – directory

+0

@Freshtea Как вы помещаете значение в представление таблицы, зависит от того, является ли представление таблицы основано на ядре или на основе представления. По умолчанию новые представления таблиц, созданные с помощью Xcode 6, основаны на представлении, ранее они были основаны на ячейках. Что он? – SevenBits

0

Я не знаю, как ваша модель данных структурирована, но ты не мог попробовать что-то вроде следующего:

self.excersiseSection = [[[self.schemeData objectForKey:@"user_excersise_sections"] objectAtIndex:0] objectForKey:@"exercises"]; 

Просто цепную вызовы вместе. Обратите внимание, что это не будет работать, если user_excersise_sections и exercises не являются NSArray объектов.

0

Я бы предложил создать определенные классы, как UserTrainingDay, UserExcersiseSection и Excercise и использовать, например, Mantle рамки для установления сопоставления между вашими JSON и модели классов.

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