Arrays 嵌套字典数组Xcode中的数组

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

我创建了一个plist文件,如下所示,所有部分都遵循相同的结构:

<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];