来自 plist 文件的 NSArray 或 NSDictionary
Posted
技术标签:
【中文标题】来自 plist 文件的 NSArray 或 NSDictionary【英文标题】:NSArray or NSDictionary from plist file 【发布时间】:2013-11-20 16:37:46 【问题描述】:在一种方法中,我需要从plist
文件中读取NSArray
或NSDictionary
。
这是我的问题:当我不知道其中是数组还是字典时,如何从 plist
文件创建 NSArray
或 NSDictionary
?
我知道我能做到:
NSArray *myArray = [NSArray arrayWithContentsOfFile:filePath];
或
NSDictionary *myDico = [NSDictionary dictionaryWithContentsOfFile:filePath];
但我不知道 filePath 是否包含 NSArray
或 NSDictionary
。我想要类似的东西:
id myObject = [... ...WithContentOfFile:filePath];
有人可以帮助我并给我最好的方法吗?
【问题讨论】:
【参考方案1】:方法如下
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
【讨论】:
【参考方案2】:您可以使用 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;
【讨论】:
感谢您的回答,但是如何获取 classFromPlist 对象? 用其他提示更新了我的答案。 谢谢!它完美无缺!但是页面link 说它很快就会被弃用。 只需使用新的即可:) 我更新了答案,但不确定是否仍然有效 - 请检查并告诉我 是的!我使用@graver的方法。谢谢你们。以上是关于来自 plist 文件的 NSArray 或 NSDictionary的主要内容,如果未能解决你的问题,请参考以下文章