阅读plist问题

时间:2011-08-04 23:01:43

标签: iphone objective-c ipad

我有一个plist是一个数组,文件名叫startups.plist。我尝试通过以下代码将其读入数组:

NSString *path = [[NSBundle mainBundle] pathForResource:@"startups" ofType:@"plist"];
NSMutableArray * wordList = [[NSMutableArray alloc] initWithContentsOfFile:path];

但是,wordList在这里始终为0。在设备上测试时打印路径,它给了我:

/var/mobile/Applications/CCBF94D9-389C-4D63-B023-F39653FDCEF4/My.app/startups.plist

以下是plist的结构:

enter image description here

数组的大小为0。 我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

initWithContentsOfFile:不会打开plist文件。以下是一个示例:

NSString *errorDesc = nil;
NSPropertyListFormat format;
NSString    *path = [[NSBundle mainBundle] pathForResource:@"startups" ofType:@"plist"];
NSData      *plistXML = [[NSFileManager defaultManager] contentsAtPath:path];
NSDictionary *temp = (NSDictionary *)[NSPropertyListSerialization                     
                                          propertyListFromData:plistXML
mutabilityOption:NSPropertyListMutableContainersAndLeaves
                                          format:&format
                                          errorDescription:&errorDesc];
NSLog(@"%@",[temp objectForKey:@"Root"]);

答案 1 :(得分:1)

你必须使用NSDictionary因为你的plist是一个字典,它有一个关键的Root是一个数组。

NSString *path = [[NSBundle mainBundle] pathForResource:@"startups" ofType:@"plist"];
NSMutableDictionary * dict = [[NSMutableDictionary alloc] initWithContentsOfFile:path];

NSMutableArray *wordList = (NSMutableArray *)[dict objectForKey:@"Root"];

我不确定是否会投射到NSMutableArray。也许你必须这样做

NSMutableArray *wordList = [NSMutableArray arrayWithArray:(NSArray*)[dict objectForKey:@"Root"]]