我可以从 plist 中读取,但无法从另一个 plist 中读取

Posted

技术标签:

【中文标题】我可以从 plist 中读取,但无法从另一个 plist 中读取【英文标题】:I can read from a plist but fail to read from another one 【发布时间】:2015-10-29 03:30:44 【问题描述】:

我在我的支持文件中创建了两个名为 information.plist 和 data.plist 的 plist 文件,并将它们都添加到 Copy Bundle Resource。

我使用下面的代码从 plist 中读取数据。

NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory , NSUserDomainMask , YES );
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"data.plist"];
NSMutableDictionary* dictPlist = [ [ NSMutableDictionary alloc ] initWithContentsOfFile:filePath];

并尝试显示 plist 中的数据:

NSMutableDictionary *data1 = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
NSLog(@"%@", data1);

我从 information.plist 获取数据,但从 data.plist 获取“null”。

我错过了什么吗?

感谢您的帮助!

【问题讨论】:

这两个 plist 文件在 app bundle 中,而不是 Documents 文件夹中。当然,除非您有其他代码复制了这些文件。 但是为什么 information.plist 有效?以及如何将此文件复制到 Documents 文件夹? 你从哪里读到的?捆绑包还是文档? 当我发布这个应用程序时,我应该从 Document 中读取 plist?我说的对吗? 没有。 Supporting Files 中的 plist 文件是应用程序包的一部分,而不是 Documents 文件夹。 【参考方案1】:

试试这个:

// Path of plist from bundle
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"];

// Since your plist's root is a dictionary else you should form NSArray from contents of plist
NSDictionary *dataPlist = [NSDictionary dictionaryWithContentsOfFile:plistPath];

说明:您的 plist 在应用程序包中,而不是在 Documents 目录中,这就是您没有得到它们的原因。

【讨论】:

如果您将 PLIST 放入支持文件中,那么您必须从包中读取它,正如我在代码中提到的那样。 ` NSString plistPath = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"]; NSMutableDictionary dictPlist = [ [ NSMutableDictionary alloc ] initWithContentsOfFile:plistPath]; NSLog(@"----------------这是唯一的办法:%@",dictPlist); ` 再次为空。我正在用我的 iphone 进行测试,这有关系吗? 请注意检查文件名,包括大小写。它必须是您的Supporting Files 文件夹中的data.plist。正如我上面建议的那样,在您的.app 文件中编译应用程序后,仔细检查data.plist 的存在。 感谢您的帮助,对我来说意义重大。 总是乐于提供帮助。它解决了您的问题吗?

以上是关于我可以从 plist 中读取,但无法从另一个 plist 中读取的主要内容,如果未能解决你的问题,请参考以下文章

无法从另一个应用程序的面板控件中获取文本

从 plist 读取字典后无法编辑字典

读取数据:文件“Info.plist”无法打开,因为没有这样的文件

“帮助修复”错误:无法从文件中读取属性列表:info.plist

无法从另一个孩子读取一个孩子写入的共享内存

Xcode 7 错误:无法从 Info.plist 中读取 CFBundleIdentifier(空)