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

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

[liveData writeToFile:localFilePath atomically:YES] 

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

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

它可能有多种原因:

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

我知道这是一个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时重新展开它。

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

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