извлекать данные из Plist в массив и словарь - PullRequest
1 голос
/ 19 апреля 2010

Я сделал лист, который выглядит так:

<?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>
<array>
    <dict>
        <key>Company</key>
        <string>xxx</string>
        <key>Title</key>
        <string>VP Marketing</string>
        <key>Name</key>
        <string>Alon ddfr</string>
    </dict>
    <dict>
        <key>Name</key>
        <string>Adam Ben Shushan</string>
        <key>Title</key>
        <string>CEO</string>
        <key>Company</key>
        <string>Shushan ltd.</string>
    </dict>
</array>
<array>
    <dict>
        <key>Company</key>
        <string>xxx</string>
        <key>Title</key>
        <string>CTO</string>
        <key>Name</key>
        <string>Boaz frf</string>
    </dict>
</array>
</array>
</plist>

Теперь я хочу извлечь такие данные (все «А» для ключа «Имя» в один раздел и все «В» «Имя» в другой):

NSString *plistpath = [[NSBundle mainBundle] pathForResource:@"PeopleData" ofType:@"plist"];
NSMutableArray *attendees = [[NSMutableArray alloc] initWithContentsOfFile:plistpath];


listOfPeople = [[NSMutableArray alloc] init];//Add items

NSDictionary *indexADict = [NSDictionary dictionaryWithObject:[[attendees objectAtIndex:0] objectForKey:@"Name"] forKey:@"Profiles"];


NSDictionary *indexBDict = [NSDictionary dictionaryWithObject:[[attendees objectAtIndex:1] objectForKey:@"Name"]  forKey:@"Profiles"];

[listOfPeople addObject:indexADict];
[listOfPeople addObject:indexBDict];

Это для просмотра их в секционном табличном представлении.

Я знаю, что проблема здесь:

NSDictionary *indexADict = [NSDictionary dictionaryWithObject:[[attendees objectAtIndex:0] objectForKey:@"Name"] forKey:@"Profiles"];

Но я просто не могу понять, как это сделать правильно.

Спасибо.

1 Ответ

0 голосов
/ 19 апреля 2010

У вас есть список, содержащий массив массивов словарей.

NSDictionary *indexADict =  (NSDictionary *)[(NSArray *)[attendees objectAtIndex:0] objectAtIndex:0];

Ключ (профили), который вы запрашиваете, не существует в вашем списке. Нет смысла создавать новый словарь для хранения существующего словаря из вашего списка.

Если у вас есть массив словарей (или любые объекты, соответствующие кодировке значения ключа), вы можете извлечь массив атрибутов «Имя» следующим образом:

NSArray *names = [array valueForKey:@"Name"];
...