I created the data structure manually using the following:
NSDictionary* league1 = [[NSDictionary alloc] initWithObjectsAndKeys: @"Barclays Premier League", @"name", @"Premier League", @"shortname", @"101", @"id", nil]; NSDictionary* league2 = [[NSDictionary alloc] initWithObjectsAndKeys: @"Coca-Cola Championship", @"name", @"Championship", @"shortname", @"102", @"id", nil]; NSDictionary* league3 = [[NSDictionary alloc] initWithObjectsAndKeys: @"Scottish Premier League", @"name", @"SPL", @"shortname", @"201", @"id", nil]; NSDictionary* league4 = [[NSDictionary alloc] initWithObjectsAndKeys: @"Champions League", @"name", @"UCL", @"shortname", @"501", @"id", nil]; contentArray = [[NSArray alloc] initWithObjects: [[NSDictionary alloc] initWithObjectsAndKeys: @"English", @"category", [[NSArray alloc] initWithObjects: league1, league2, nil], @"leagues", nil], [[NSDictionary alloc] initWithObjectsAndKeys: @"Scottish", @"category", [[NSArray alloc] initWithObjects: league3, nil], @"leagues", nil], [[NSDictionary alloc] initWithObjectsAndKeys: @"Tournaments", @"category", [[NSArray alloc] initWithObjects: league4, nil], @"leagues", nil], nil]; [league1 release]; [league2 release]; [league3 release]; [league4 release];
However, I thought it would be better if it were read from a file. Therefore, I created the leagues.plist file, which has the following structure:
<?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>category</key> <string>English</string> <key>leagues</key> <array> <dict> <key>name</key> <string>Barclays Premier League</string> <key>shortname</key> <string>Premier League</string> <key>id</key> <string>101</string> </dict> <dict> <key>name</key> <string>Coca-Cola Championship</string> <key>shortname</key> <string>Championship</string> <key>id</key> <string>102</string> </dict> </array> </dict> <dict> <key>category</key> <string>Scottish</string> <key>leagues</key> <array> <dict> <key>name</key> <string>Scottish Premier League</string> <key>shortname</key> <string>SPL</string> <key>id</key> <string>201</string> </dict> </array> </dict> <dict> <key>category</key> <string>Tournaments</string> <key>leagues</key> <array> <dict> <key>name</key> <string>Champions League</string> <key>shortname</key> <string>UCL</string> <key>id</key> <string>501</string> </dict> </array> </dict> </array> </plist>
How do I read this file. I tried various methods but nothing worked. I donβt even know if I look in the right place for the file. For reference, I am trying to use the following methods:
NSString* errorDesc = nil; NSPropertyListFormat format; NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"league" ofType:@"plist"]; NSData* plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath]; contentArray = (NSArray*)[NSPropertyListSerialization propertyListFromData:plistXML mutabilityOption:NSPropertyListMutableContainersAndLeaves format:&format errorDescription:&errorDesc]; if (!contentArray) { NSLog(errorDesc); [errorDesc release]; }
or
NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"league" ofType:@"plist"]; contentArray = [NSArray arrayWithContentsOfFile:plistPath];
or
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); NSString *documentsPath = [paths objectAtIndex:0]; NSString *fooPath = [documentsPath stringByAppendingPathComponent:@"leagues.plist"]; NSLog(fooPath); contentArray = [NSArray arrayWithContentsOfFile:fooPath]; NSLog(@"%@",contentArray);
It totally drives me crazy. Help me please!
Thank you