writeToFile失败 - 我如何调试为什么失败(什么工具)?

时间:2011-09-22 19:00:44

标签: iphone ios xcode

我从JSON获得了一个NSDictionary(使用SBJson),我想存储它。我正在使用

[liveData writeToFile:localFilePath atomically:YES]

它失败了。数据看起来像所有NSString,NSDictionary和NSArray(“原子地:是”要求)。我使用了相同的localFilePath elesewhere。

所以我的问题是:如何找出问题所在?我可以使用哪些工具来理解writeToFile失败的原因?日志不显示错误消息。

3 个答案:

答案 0 :(得分:7)

可能有多种原因:

  • 您写入的路径是错误的,不可写(您没有写入权限),或父目录不存在(如果localFilePath是“/path/to/file.plist “但目录”/ path / to /“不存在,它将失败)
  • liveData字典包含不是PropertyList对象的对象。只有NSDataNSDateNSNumberNSStringNSArrayNSDictionary个对象才能写入属性列表文件({{{ 1}} 执行写入plist文件,因此字典执行必须只包含该方法的PList对象才能成功)

答案 1 :(得分:4)

我知道这是一个2岁的问题。但是因为我遇到了同样的问题并修复了这里我发现的问题。我打赌你的NSDictionary有一些不是NSStrings的键。

而不是键入:

[_myDictionay setObject:thisObj forKey:[NSNumber numberWithInt:keyNumber]];

键如:

[_myDictionay setObject:thisObj forKey:[NSString stringWithFormat:@"%i",numberWithInt:keyNumber]];

这解决了我的问题。

无法将顶部方式保存为plist文件。

由于您是从JSON转换获取信息,因此可能存在一些NSNumber中的对象或键。你必须转换它们。但那是一种痛苦。

因为你已经在json中使用了它,只需将它作为json字符串完整地存储在@“data”键中,然后在将plist加载回数组或dict时重新展开它。

答案 2 :(得分:1)

我尝试将NSDictionary保存到磁盘,只包含键和值的数字。将密钥切换到NSString可以正常工作,但当它们的密钥是NSNumber时却不能。密钥必须是NSString吗?

编辑:我现在知道它可以是任何响应哈希的对象;通常它是NSString的。