无法将数据从Plist加载到数组中

时间:2012-01-05 22:06:31

标签: cocoa plist nsmutabledictionary

我有一个奇怪的问题,可能有一个简单的解决方案,我无法找到/弄清楚。非常感谢任何想法。

我有一个属性列表,它由一个数组作为根对象组成。该数组包含几个词典。

下面的代码显示了我是如何尝试将plist数据加载到我的数组中的 -

-(void)awakeFromNib{

    NSString *plistPath = @"/Users/administrator/Desktop/WipeOut Winner!/Data.plist";
    NSLog(@"Plist path is %@",plistPath);


    if (![[NSFileManager defaultManager] fileExistsAtPath:plistPath]) {
            NSLog(@"File wasn't found");
    }


    tableDataArray = [[NSMutableArray alloc]initWithContentsOfFile:plistPath];

    NSLog(@"array count is %lu",[tableDataArray count]);   

}

以下是plist文件 -

<?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>root</key>
    <array>
        <dict>
            <key>winner</key>
            <string>Scott</string>
            <key>personChosen</key>
            <string>Female</string>
            <key>winType</key>
            <string>2 and &apos;Won&apos; -3 pts.</string>
            <key>Points</key>
            <string>3</string>
        </dict>
        <dict>
            <key>winner</key>
            <string>Emily</string>
            <key>personChosen</key>
            <string>Male</string>
            <key>winType</key>
            <string>All The Way! -5 pts.</string>
            <key>points</key>
            <string>5</string>
        </dict>
    </array>
</dict>
</plist>

正在找到plist文件。我已经确认我的plist中的根对象是一个数组(字典)。此调用后我的数组计数总是变为零。

在尝试弄清楚的过程中,我将plist中的数据更改为单个NSDictionary而不是包含字典的数组。然后我将plist加载到NSDictionary中,将该字典加载到数组中,并且数组计数按预期为1,因此我确信,就plist的查找,加载等而言,事情已正确连接。在另一个测试中,而不是尝试使用下面的plist数据加载数组

tableDataArray = [[NSMutableArray alloc]initWithContentsOfFile:plistPath];

我把所有的plist东西都绕过去了,只是加载了这个数组 -

tableDataArray =[[NSMutableArray alloc]initWithCapacity:1];

NSDictionary *dict = [[NSDictionary alloc]initWithObjectsAndKeys:@"Emily",@"name",@"12",@"age", nil];

[tableDataArray addObject:dict];

并且还将数组计数更改为预期的一个。所以我认为我的问题必须与这个

有关
tableDataArray = [[NSMutableArray alloc]initWithContentsOfFile:plistPath];

但我似乎无法弄清楚在哪里。

1 个答案:

答案 0 :(得分:1)

你的plist的根不是数组。它是一个包含单个键“root”的字典,指向一组字典。你的plist应该看起来像:

<?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">
<array>
    <dict>
        <key>winner</key>
        <string>Scott</string>
        <key>personChosen</key>
        <string>Female</string>
        <key>winType</key>
        <string>2 and &apos;Won&apos; -3 pts.</string>
        <key>Points</key>
        <string>3</string>
    </dict>
    <dict>
        <key>winner</key>
        <string>Emily</string>
        <key>personChosen</key>
        <string>Male</string>
        <key>winType</key>
        <string>All The Way! -5 pts.</string>
        <key>points</key>
        <string>5</string>
    </dict>
</array>
</plist>