Чтение нескольких массивов, содержащих несколько словарей, содержащих несколько массивов, из файла plist - PullRequest
0 голосов
/ 30 августа 2011

Привет, ребята. Я хочу прочитать следующий plist-файл в память и выполнить некоторые вычисления с результатами, plist-файл выглядит следующим образом, это только часть его, чтобы показать структуру:

<dict>
<key>Stations</key>
<array>
    <dict>
        <key>Name</key>
        <string>Hatfield</string>
        <key>Coords</key>
        <dict>
            <key>Lat</key>
            <integer>0</integer>
            <key>Long</key>
            <integer>0</integer>
        </dict>
        <key>Routes</key>
        <array>
            <dict>
                <key>Name</key>
                <string>H1 Hatfield - Brooklyn</string>
                <key>Stops</key>
                <array>
                    <dict>
                        <key>Name</key>
                        <string>Burnett St &amp; Festival St</string>
                        <key>Coords</key>
                        <dict>
                            <key>Lat</key>
                            <string>-25.75081</string>
                            <key>Long</key>
                            <string>28.23272</string>
                        </dict>
                    </dict>
                    <dict>
                        <key>Name</key>
                        <string>University Rd &amp; Lynwood Rd</string>
                        <key>Coords</key>
                        <dict>
                            <key>Lat</key>
                            <string>-25.75592</string>
                            <key>Long</key>
                            <string>28.22517</string>
                        </dict>
                    </dict>
                    <dict>
                        <key>Name</key>
                        <string>Roper St &amp; Charles St</string>
                        <key>Coords</key>
                        <dict>
                            <key>Lat</key>
                            <string>-25.76463</string>
                            <key>Long</key>
                            <string>28.22737</string>
                        </dict>
                    </dict>

В настоящее времяЯ пытаюсь прочитать их, используя следующее:

NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"Busses.plist"];

NSDictionary *plistData = [[NSDictionary dictionaryWithContentsOfFile:finalPath] retain];

NSMutableArray *arrayOfStationsFromFile = [[[NSMutableArray alloc] initWithObjects:[plistData objectForKey:@"Stations"], nil] retain];


for(int i = 0; i < [arrayOfStationsFromFile count]; i++)
{

    NSDictionary *stationWithBusses = (NSDictionary *)[[arrayOfStationsFromFile objectAtIndex:i] retain];
    NSMutableArray *routes = [[stationWithBusses objectForKey:@"Routes"] retain];
    for(int j = 0; j < [routes count]; j++)
    {
        NSMutableDictionary *routesData = [routes objectAtIndex:j];
        NSString *name = [routesData objectForKey:@"Name"];
        NSMutableArray *stops = [routesData objectForKey:@"Stops"];
        for(int x = 0; x < [stops count]; x++)
        {
            NSMutableDictionary *stopsData = [stops objectAtIndex:x];
            NSString *subName = [stopsData objectForKey:@"Name"];
            NSMutableDictionary *coords = [stopsData objectForKey:@"Coords"];
            NSString *latt = [coords objectForKey:@"Lat"];
            NSString *longs = [coords objectForKey:@"Long"];
            CLLocationCoordinate2D coordinate;
            coordinate.latitude = [latt longLongValue];
            coordinate.longitude = [longs longLongValue];
            [busses addObject:[[Busses alloc] initWithName:name subName:subName coordinate:coordinate]];
        }
    }
}

Но я получаю SIGABRT в этой строке

NSMutableArray *routes = [[stationWithBusses objectForKey:@"Routes"] retain];

Первая строка вывода консоли:

2011-08-30 12:31:57.699 GautrainiPhone[12633:e903] -[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x5ba6c10

Есть идеи, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 30 августа 2011

Попробуйте заменить первые строки моим кодом:

NSString *errorDesc = nil;
NSPropertyListFormat format;
NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:finalPath];
NSMutableDictionary *plistData = (NSMutableDictionary *)[NSPropertyListSerialization propertyListFromData:plistXML mutabilityOption:NSPropertyListMutableContainersAndLeaves format:&format errorDescription:&errorDesc];
NSMutableArray *arrayOfStationsFromFile = [NSMutableArray arrayWithArray:[plistData valueForKey:@"Stations"]];
0 голосов
/ 30 августа 2011

сообщение + местоположение подразумевает stationWithBusses является NSArray (не NSDictionary)

...