количество элементов словаря .plist (iOS SDK) - PullRequest
0 голосов
/ 10 сентября 2009

Вот как выглядит 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;
},

Я хочу подсчитать общее количество элементов списка и отобразить их следующим образом: «4 счета».

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. Я хочу, чтобы он возвращал количество элементов в словаре.

Ответы [ 3 ]

1 голос
/ 10 сентября 2009

В вашем выражении возврата указывается количество элементов в первом элементе словаря, а не количество элементов в самом словаре. Вместо этого, я думаю, что вы хотите, это что-то вроде:

return [NSString stringWithFormat:@"%d Accounts", [plistDict count]];
0 голосов
/ 27 декабря 2010

Это старый список свойств OpenStep, который поддерживается в формате только для чтения.

Ваш код выглядит нормально, за исключением того, что NSDictionary принимает только объекты в качестве ключей, поэтому "[plistDict objectForKey:0]" не будет выполнять то, что вы ожидаете. Если вы знаете, что верхний уровень вашего списка свойств - это массив, тогда присвойте его NSArray, а не NSDictionary. Если это на самом деле словарь, используйте строковое значение для ключа, а не 0.

0 голосов
/ 10 сентября 2009

А как насчет [plistDict count]? Поскольку вы передаете 0 как ключ к словарю, вы ничего не получите назад, поскольку вы не можете использовать nil в качестве ключа или значения.

...