count .plist字典项(iOS SDK)

时间:2009-09-10 03:23:05

标签: ios nsarray plist nsdictionary

这就是plist看起来像原始的:

{
    authorLastName = Doe;
    authorFirstName = Jane;
    imageFilePath = "NoImage.png";
    title = "Account Test 1";
    year = 2009;
},
{
    authorLastName = Doe;
    authorFirstName = John;
    imageFilePath = "NoImage.png";
    title = "Account Test 2";
    year = 2009;
},

我想计算一个plist的总项目,并将它们显示为:'4 Accounts'。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                     NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *myPlistPath = [documentsDirectory
                         stringByAppendingPathComponent:@"Accounts.plist"]; 
NSDictionary *plistDict = [[NSDictionary alloc] initWithContentsOfFile:myPlistPath]; 

NSArray *array = [[plistDict objectForKey:0]
                      sortedArrayUsingSelector:@selector(compare:)]; 

return([NSString stringWithFormat:@"%d Accounts", [array count]]);

但是,结果返回0.我希望它返回字典中的ammount项。

3 个答案:

答案 0 :(得分:1)

您的return语句正在转发字典第一个元素中的项目数,而不是字典本身的项目数。相反,我认为你想要的是:

return [NSString stringWithFormat:@"%d Accounts", [plistDict count]];

答案 1 :(得分:0)

[plistDict count]怎么样?由于您传递0作为字典的关键字,因此您无法使用nil作为键或值,因此您将无法获得任何内容。

答案 2 :(得分:0)

这似乎是一个旧的OpenStep属性列表,支持作为只读格式。

您的代码看起来没问题,只有NSDictionary只将对象作为键,因此“[plistDict objectForKey:0]”不会按预期执行。如果您知道属性列表的顶级是一个数组,那么将其分配给NSArray,而不是NSDictionary。如果它实际上是字典,则使用字符串值作为键,而不是0。