2014-09-24 73 views
-3

我對xcode/objective-c頗爲陌生,現在我面臨一個問題。Objective-C選擇數組的一部分

在我的應用程序中,我有一個從我的服務器接收Json數組,我通過segue將數組發送到secondViewController。這一切都正確。

在我secondViewController我收到數組,並選擇我需要的部分;

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

這將輸出我推送到該控制器的數組部分,所以沒關係。現在,我想 在這個數組中選擇嵌套的'數組'(打印我的表格單元格)我試圖像上面的代碼一樣使用索引'exercise'來完成它,但沒有成功。

{ 
    "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'包含一個字典數組,因此您可能有多個'exercise'數組。你想怎麼處理? – Droppy 2014-09-24 13:47:04

+0

真的,如果需要的話,我可以重建jSon數組,如果它使事情更簡單。我試圖達到的是獲得一個數組中的練習,所以我可以將它們打印在TableViewCell中 – directory 2014-09-24 13:52:05

+0

@Freshtea查看我的編輯 – l0gg3r 2014-09-25 13:56:35

回答

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。

編輯:
這裏是一個完整的解決方案,以使您的tableView。
1)在strotybaord中創建一個TableViewController,並在storyboard中分配一個Custom類。
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 2014-09-24 19:44:42

+0

@Freshtea如何將值放入表視圖取決於表視圖是基於單元還是基於視圖。默認情況下,使用Xcode 6創建的新表格視圖是基於視圖的,以前它們是基於單元格的。這是什麼? – SevenBits 2014-09-25 13:06:52

0

我不知道你的數據模型所採用的結構,但不能嘗試類似如下:

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

剛剛鏈中的通話在一起。請注意,如果user_excersise_sectionsexercises不是NSArray對象,則這將不起作用。

0

我建議建立像UserTrainingDayUserExcersiseSectionExcercise特定的類和使用例如Mantle框架將JSON和模型類之間建立映射。