Objective-C选择数组的一部分

时间:2014-09-24 13:41:58

标签: ios objective-c arrays json xcode

我对xcode / objective-c很新,我现在面临一个问题。

在我的应用程序中,我有一个从我的服务器接收的Json数组,我通过segue将数组发送到secondViewController。一切顺利。

在我的secondViewController中,我收到数组并选择我需要的部分;

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

这会输出我推到这个控制器的数组部分,这样就可以了。现在,我想要 为了在这个数组中选择嵌套的'exercise'数组(打印我的表格单元格),我试图像上面的代码一样使用索引'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

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

我不知道您的数据模型是如何构建的,但您不能尝试以下内容:

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

将呼叫链接在一起。请注意,如果user_excersise_sectionsexercises不是NSArray个对象,则无法使用此功能。

答案 2 :(得分:0)

我建议创建特定的类,例如UserTrainingDayUserExcersiseSectionExcercise,并使用示例Mantle框架来建立JSON和模型类之间的映射。