来自plist文件的NSArray或NSDictionary

时间:2013-11-20 16:37:47

标签: ios objective-c nsarray nsdictionary plist

在方法中,我需要从NSArray文件中读取NSDictionaryplist

以下是我的问题:当我不知道它是否是数组或字典时,如何从NSArray文件创建NSDictionaryplist

我知道我可以做:

NSArray *myArray = [NSArray arrayWithContentsOfFile:filePath];

NSDictionary *myDico = [NSDictionary dictionaryWithContentsOfFile:filePath];

但我不知道filePath是否包含NSArrayNSDictionary。我想要像:

id myObject = [... ...WithContentOfFile:filePath];

有人可以帮助我并给我最好的方法吗?

2 个答案:

答案 0 :(得分:6)

以下是

NSData *data = [NSData dataWithContentsOfFile:filePath];
id obj = [NSPropertyListSerialization propertyListWithData:data options:NSPropertyListImmutable format:NULL error:nil];

if([obj isKindOfClass:[NSDictionary class]]) {
    //cast obj to NSDictionary
}
else if([obj isKindOfClass:[NSArray class]]) {
    //cast obj to NSArray
}

答案 1 :(得分:1)

您可以使用isKindOfClass方法来检测哪个类。 您将必须使用以下命令加载.plist文件:

NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
plistPath = [rootPath stringByAppendingPathComponent:@"Data.plist"];
if (![[NSFileManager defaultManager] fileExistsAtPath:plistPath]) {
    plistPath = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"];
}

NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath];
id objectFromPlist = [NSPropertyListSerialization
   propertyListWithData:plistXML
   options:0
   format:&format
   errorDescription:&errorDesc];

你可以在这里查看:

if([objectFromPlist isKindOfClass:[NSArray class]])
{
    NSArray* plistArray = (NSArray*) classFromPlist;
}