我对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
答案 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_sections
和exercises
不是NSArray
个对象,则无法使用此功能。
答案 2 :(得分:0)
我建议创建特定的类,例如UserTrainingDay
,UserExcersiseSection
和Excercise
,并使用示例Mantle框架来建立JSON和模型类之间的映射。