数组无法从 plist 中读取数据
Posted
技术标签:
【中文标题】数组无法从 plist 中读取数据【英文标题】:array can't read data from plist 【发布时间】:2012-05-19 19:19:02 【问题描述】:我发现了几个类似的主题,但没有一个能解决我的问题。 基本上我想从 plist 中的数组中读取 nsstring,然后我想覆盖 nsstring 值。
NSArray *directoriespaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsDir = [directoriespaths objectAtIndex:0];
NSString *fullnamefordir = [documentsDir stringByAppendingPathComponent:@"data.plist"];
NSArray *turns = [NSArray arrayWithContentsOfFile:fullnamefordir];
NSString *resultofarray = [turns objectAtIndex:0];
NSLog(@"%@",turns);
NSLog(@"%@",resultofarray);
nslog 总是显示 null 并且到目前为止我还没有尝试保存任何内容,因为我什至无法读取该值:/
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<string>8</string>
</array>
</plist>
我也尝试过使用 nsdictionary,但它也不起作用 在此先感谢:)
【问题讨论】:
【参考方案1】:首先检查您的plist文件是否存在于文档目录中。
NSFileMangaer *objFileManager=[[NSFileManager alloc]init];
BOOL isfileExist=[objFileManager fileExistsAtPath:yourDocumentDirectoryPath];
如果 Bool 值为 true,则检查 plist 的内容。 可能是文件目录中不存在该文件,它在资源中。 如果您没有将 plist 从资源文件夹复制到文档目录,请先将其复制到那里,然后尝试访问它。
【讨论】:
nslog 显示该文件确实存在。将文件从资源复制到文档目录是什么意思,我在哪里可以找到这个文件夹? 检查您的文档目录中的 plist 文件。 YourUsername->Library->ApplicationSupport->IphoneSimulator->5.0->ChooseApplicationID->Documents 如果有很多应用程序可用,请删除所有并运行应用程序..只有一个应用程序会在那里,然后检查文档目录。 就像你说的,我删除了所有申请文件,我再次构建了我的应用程序。奇怪的是,现在我的 plist 文件在 Documents 中不存在,而且 nslog 显示该文件不存在。在这种情况下我该怎么办?顺便感谢您的回复。 这意味着您的 plist 文件在 resourceFolder 中,在开始任何操作之前先将其复制到文档目录中。 NSString *resourcePathPlist= [[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"];检查此路径是否存在。使用 fileManager 对象将其复制到 documentFolder。 [fileManagerObject copyItemAtPath:resoucePlistPath toPath:documentDirectoryPath 错误:&err]; 您无法更新应用程序包中的文件。 Application Bundle 文件是只读的。要对其进行编辑,您必须将其复制到文档中并开始操作。您在 xcode 中看到的文件位于 Application Bundle 中,您可以在 xcode 中对其进行编辑,但在运行应用程序时您无法对其进行编辑,即是只读的。以上是关于数组无法从 plist 中读取数据的主要内容,如果未能解决你的问题,请参考以下文章
从 plist 读取而不是代码数组:[NSCFArray objectForKey:]: unrecognized selector
我可以从 plist 中读取,但无法从另一个 plist 中读取