来自 plist 文件的 NSArray 或 NSDictionary

Posted

技术标签:

【中文标题】来自 plist 文件的 NSArray 或 NSDictionary【英文标题】:NSArray or NSDictionary from plist file 【发布时间】:2013-11-20 16:37:46 【问题描述】:

在一种方法中,我需要从plist 文件中读取NSArrayNSDictionary

这是我的问题:当我不知道其中是数组还是字典时,如何从 plist 文件创建 NSArrayNSDictionary

我知道我能做到:

NSArray *myArray = [NSArray arrayWithContentsOfFile:filePath];

NSDictionary *myDico = [NSDictionary dictionaryWithContentsOfFile:filePath];

但我不知道 filePath 是否包含 NSArrayNSDictionary。我想要类似的东西:

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的主要内容,如果未能解决你的问题,请参考以下文章

来自 plist 的 UITableView 加载到字典的 NSArray

iOS plist文件操作

iOS plist文件操作

iOS plist文件的增 删,改查

Settings.plist iOS

如何在 iphone 中以编程方式创建 PLIST 文件