0

我无法从下面的 plist 中获得 8 个项目。我有一个 plist “settings.plist”。现在我不想从 vragen -> category (self.catagorie - 1)-> question。8 项。但是数组保持为空。

我究竟做错了什么?

代码:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"instellingen.plist"];
NSMutableDictionary *instellingen = [NSMutableDictionary dictionaryWithContentsOfFile:path];

NSArray *vragen = [instellingen objectForKey:@"vragen"];

NSArray *cata = [vragen objectAtIndex: (self.catagorie-1)];
NSArray *question = [cata objectAtIndex: 0];
NSLog(@"count: %i", [question count]);

列表文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>vragen</key>
    <array>
        <array> <--catagorydata
            <array> <-- questiondata
                <string>vraag</string>
                <string>A</string>
                <string>B</string>
                <string>C</string>
                <string>D</string>
                <string>1</string>
                <string>standaard</string>
                <string></string>
            </array>
            <array>
                <string>vraag2</string>
                <string>A</string>
                <string>B</string>
                <string>C</string>
                <string>D</string>
                <string>1</string>
                <string>afbeelding</string>
                <string>afbeelding.jpg</string>
            </array>
        </array>
    </array>
    <key>firstBoot</key>
    <true/>
    <key>regelAtRuntime</key>
    <true/>
</dict>
</plist>
4

2 回答 2

2

首先这条线

NSString *path = [documentsDirectory stringByAppendingPathComponent:@"instellingen.plist"]; ?

应该

NSString *path = [documentsDirectory stringByAppendingPathComponent:@"settings.plist"];

我还不得不从字典中删除这些:

<--catagorydata
<-- questiondata  

除了上述两件事之外,您的代码或字典没有任何问题。
进行这些更改后,我测试了您的代码,得到的输出是:

tester[69637:c07] size of dict 3  
tester[69637:c07] count: 8  

根据 .plist 文件,这是正确的

所以你的问题出在前 4 行。确保您的文件位于 Documents 目录中(使用类似以下代码的内容查看问题所在)

    NSLog(@"Path : %@",path);

我复制了项目文件夹中的文件(因为我使用了模拟器)并使用了以下代码,一切正常

NSBundle* b=[NSBundle mainBundle];
NSURL* path1=[b URLForResource:@"settings" withExtension:@"plist"];
NSMutableDictionary *instellingen = [NSMutableDictionary dictionaryWithContentsOfURL:path1];

NSLog(@"size of dict %d",[instellingen count]);

NSArray *vragen = [instellingen objectForKey:@"vragen"];

NSArray *cata = [vragen objectAtIndex: 0];
NSArray *question = [cata objectAtIndex: 0];
NSLog(@"count: %i", [question count]);
于 2013-01-23T17:36:22.080 回答
0

只是快速阅读,但看起来你有一个“categoryData”项目数组,其中包含一个 questionData 项目数组;questionData 项是字符串。

NSArray *vragen = [instellingen objectForKey:@"vragen"]; // count = 1
NSArray *cata = [vragen objectAtIndex: (self.catagorie-1)]; // count = 2
NSString *question = [cata objectAtIndex: 0];

建议您添加一些断点并查看您的数据。或者,NSLog(@"data = %@", cata); 等等

于 2013-01-23T16:14:36.200 回答