我有一个奇怪的问题,可能有一个简单的解决方案,但我就是找不到。任何想法都将不胜感激。
我有一个属性列表,它由一个作为根对象的数组组成。该数组包含几个字典。
下面的代码显示了我如何尝试将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 'Won' -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];
这也将数组计数更改为1。所以我想我的问题一定和有关
tableDataArray = [[NSMutableArray alloc]initWithContentsOfFile:plistPath];
但我似乎不知道在哪里。
plist的根不是数组。这是一个字典,它有一个指向字典数组的单键"根"。你的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 'Won' -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>