Iphone 在plist中保存单个NSMutableDictionary
我有一本字典需要保存到plist中。paletteDictionary始终返回nil:Iphone 在plist中保存单个NSMutableDictionary,iphone,plist,nsdictionary,Iphone,Plist,Nsdictionary,我有一本字典需要保存到plist中。paletteDictionary始终返回nil: - (void)saveUserPalette:(id) sender { [paletteDictionary setObject:matchedPaletteColor1Array forKey:@"1"]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask
- (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");
}
在模拟器中运行应用程序并浏览到以下路径: ~/Library/Application Support/iPhone模拟器/User/Applications/{A GUID}/Documents 其中GUID将是如下字符串:06430A38-AFAC-4C68-8F39-DBD6C81A5AA6(可能是最后修改的文件夹) 验证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'ed。在模拟器中运行应用程序并浏览到以下路径: ~/Library/Application Support/iPhone模拟器/User/Applications/{A GUID}/Documents 其中GUID将是如下字符串:06430A38-AFAC-4C68-8F39-DBD6C81A5AA6(可能是最后修改的文件夹) 验证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。在使用paletteDictionary之前检查您是否正在分配(alloc/init)paletteDictionary。在使用它之前检查您是否正在分配(alloc/init)paletteDictionary。您能提到什么是对象吗“matchedPaletteColor1Array”。我相信,它是一些自定义类对象。据我所知,可写对象必须符合NSCoding,NSString、NSDate等已经存在,因此在给定代码中,将“matchedPaletteColor1Array”设置为某个字符串即可
你可以看下面的文章来启用你的对象NSCoding。你能提到什么对象是“matchedPaletteColor1Array”吗?我相信,它是一些自定义类对象。据我所知,可写对象必须符合NSCoding,NSString、NSDate等已经存在,所以在给定的代码中,设置“matchedPaletteColor1Array”“因为有些绳子会起作用
您可以查看下面的文章来启用对象NSCoding 错误是什么?代码似乎还可以。没有错误,但plistDictionary仍然为零。记录错误“未能从磁盘检索字典”。您可以编辑您的问题以提及这一点吗?错误是什么?代码似乎没有问题。没有错误,但plistDictionary仍然为零。记录错误“未能从磁盘检索字典”。您可以编辑您的问题以提及这一点吗?UserPaletteData.plist不在那里。我当前只将一个数组保存到字典中。数组仅包含字符串。能否确认paletteDictionary不是==nil?UserPaletteData.plist不存在。我当前仅将一个数组保存到字典中。数组只包含字符串。您能确认paletteDictionary不是==nil吗?