我从JSON获得了一个NSDictionary(使用SBJson),我想存储它。我正在使用
[liveData writeToFile:localFilePath atomically:YES]
它失败了。数据看起来像所有NSString,NSDictionary和NSArray(“原子地:是”要求)。我使用了相同的localFilePath elesewhere。
所以我的问题是:如何找出问题所在?我可以使用哪些工具来理解writeToFile失败的原因?日志不显示错误消息。
答案 0 :(得分:7)
可能有多种原因:
localFilePath
是“/path/to/file.plist “但目录”/ path / to /“不存在,它将失败)NSData
,NSDate
,NSNumber
,NSString
,NSArray
或NSDictionary
个对象才能写入属性列表文件({{{ 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的。