Arrays 嵌套字典数组Xcode中的数组
我创建了一个plist文件,如下所示,所有部分都遵循相同的结构:Arrays 嵌套字典数组Xcode中的数组,arrays,xcode,uitableview,nested,plist,Arrays,Xcode,Uitableview,Nested,Plist,我创建了一个plist文件,如下所示,所有部分都遵循相同的结构: <array> <dict> <key>image</key> <string>gradient1.png</string> <key>name</key> <string>Section 1</string> <key
<array>
<dict>
<key>image</key>
<string>gradient1.png</string>
<key>name</key>
<string>Section 1</string>
<key>list</key>
<array>
<dict>
<key>questionTitle</key>
<string>How are you doing?</string>
<key>questionInfo</key>
<string>questionInfo1</string>
</dict>
<dict>
<key>questionTitle</key>
<string>What are you doing?</string>
<key>questionInfo</key>
<string>questionInfo2</string>
</dict>
<dict>
<key>questionTitle</key>
<string>Where are you going</string>
<key>questionInfo</key>
<string>questionInfo3</string>
</dict>
</array>
</dict>
我想这可能是我如何创建questionArray的问题,或者是我在表的标签中引用它的方式(见下文)的问题,但是每个单元格都有相同的条目(但不是重复的第一个或最后一个条目)
非常感谢你的帮助 好的,我想我发现了你的问题 您正在将
questionList
设置为category.list
在第一个for循环中。for循环在运行questionArray
循环之前完成(因此第二个for循环将只运行一个questionList
——最后一个)
我认为您所追求的解决方案是将第二个for循环放入第一个for循环中:
for (NSDictionary *dictionary in mainArray) {
Category *category = [[Category alloc] init];
category.name = [dictionary objectForKey:@"name"];
category.list = [dictionary objectForKey:@"list"];
category.image = [dictionary objectForKey:@"image"];
[categoryArray addObject:category];
NSMutableArray *questionArray = [[NSMutableArray alloc] initWithCapacity:nil];
for (NSDictionary *dictionary in category.list) {
Category *question = [[Category alloc] init];
question.questionTitle = [dictionary objectForKey:@"questionTitle"];
question.questionInfo = [dictionary objectForKey:@"questionInfo"];
[questionArray addObject:question];
}
[self.questionList addObject:questionArray];
}
self.categoryList = categoryArray;
然后,cellforrowatinexpath
中的问题是:
Category *question = (Category *)[[self.questionList objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
我还没有测试过这个,但希望它能工作——或者使用一些NSLog,让我们更接近一个可行的解决方案。我以前从未见过
initWithCapacity:nil
。在您的questionArray
上,为什么不直接执行NSMutableArray*questionArray=[[NSMutableArray alloc]init]代码>谢谢,我认为plist中的东西会填充数组,所以如果开始时为零就很重要了。。。尽管如此,在每个单元格中仍然显示相同的内容-有什么想法吗?请您解释一下您希望显示的内容。据我所知,每个部分都是一个类别列表,在该部分中有包含每个问题的行?我想在每个单元格中显示“questionTitle”(参见第二段代码)。。问题标题和它们的相关信息都在字典中,这些信息包含在每个部分的数组中。目前的问题是,它为每个单元格显示相同的问题标题。。谢谢你的帮助我发现这是最后一节的第一个问题,每个单元格都会重复这个问题-知道为什么会这样吗?谢谢Patrick,我认为你关于循环的看法是对的。。问题被添加到questionArray中,但questionList始终为空,无论我将其放在循环中还是itAh之外,这一行for(NSDictionary*dictionary in category.list)可能有问题{
如果你把一个NSLog放在那里,什么都不会发生?啊,好吧,我为问题列表添加了一个惰性实例化,它不再总是空的,但只有最后一部分的问题被添加到问题列表数组中。有什么想法吗?再次感谢的(NSDictionary*dictionary in category.list){
在NSLog中显示得很好,并且可以完成每个部分,现在的问题是只有最后一部分的问题被添加到问题列表中,不确定为什么?完成了!我在错误的位置执行了self.questionList=[[NSMutableArray alloc]init]
,感谢您的帮助!
for (NSDictionary *dictionary in mainArray) {
Category *category = [[Category alloc] init];
category.name = [dictionary objectForKey:@"name"];
category.list = [dictionary objectForKey:@"list"];
category.image = [dictionary objectForKey:@"image"];
[categoryArray addObject:category];
NSMutableArray *questionArray = [[NSMutableArray alloc] initWithCapacity:nil];
for (NSDictionary *dictionary in category.list) {
Category *question = [[Category alloc] init];
question.questionTitle = [dictionary objectForKey:@"questionTitle"];
question.questionInfo = [dictionary objectForKey:@"questionInfo"];
[questionArray addObject:question];
}
[self.questionList addObject:questionArray];
}
self.categoryList = categoryArray;
Category *question = (Category *)[[self.questionList objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];