我有一本字典需要保存到plist中。 paletteDictionary总是返回nil:
- (void)saveUserPalette:(id) sender
{
[paletteDictionary setObject:matchedPaletteColor1Array forKey:@"1"];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"UserPaletteData.plist"];
// write plist to disk
[paletteDictionary writeToFile:path atomically:YES];
}
我正在以不同的视图回读数据,如:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"UserPaletteData.plist"];
NSMutableDictionary *plistDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:path];
if(plistDictionary==nil ){
NSLog(@"failed to retrieve dictionary from disk");
}
答案 0 :(得分:2)
你能提一下对象是“matchedPaletteColor1Array”吗?我相信,它的一些自定义类对象。据我所知,可写对象必须符合NSCoding,NSString,NSDate等已经存在,所以在给定代码中,将“matchedPaletteColor1Array”设置为某些字符串将起作用。
您可以查看以下帖子,以启用对象NSCoding。 objects conforming to nscoding will not writetofile
答案 1 :(得分:1)
在模拟器中运行您的应用程序并浏览到以下路径:
〜/ Library / Application Support / iPhone Simulator / User / Applications / {A GUID} / Documents
其中GUID将是这样的字符串:06430A38-AFAC-4C68-8F39-DBD6C81A5AA6(它可能是Last Modified文件夹)。
验证UserPaletteData.plist是否存在并将其加载到 Property List Editor.app 中以验证它是否包含某些数据。
还要确保您在字典中仅使用以下数据类型,否则将无法写入plist:(NSData,NSDate,NSNumber,NSString,NSArray或NSDictionary)。
要验证您尝试保存到磁盘的字典是否对plist有效,请尝试以下操作:
for (id key in paletteDictionary)
{
NSLog(@"key: %@, value: %@, class: %@", key, [paletteDictionary objectForKey:key], NSStringFromClass([[paletteDictionary objectForKey:key] class]));
}
那应该告诉你,你的任何对象是否是plist的错误数据类型。
如果仍然没有帮助,那么在调用saveUserPalette之前,你应该确保paletteDictionary已经被alloc / init'。
答案 2 :(得分:0)
在使用之前检查您是否正在分配(alloc / init)paletteDictionary。