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对象的对象。 只有
NSData
,NSDate
,NSNumber
,NSString
,NSArray
或NSDictionary
对象可以写入属性列表文件(和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的。