Iphone 在plist中保存单个NSMutableDictionary

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

我有一本字典需要保存到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");
}

在模拟器中运行应用程序并浏览到以下路径:

~/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吗?