带有 NSDictionary 的数组不想保存到 standardUserDefaults

Posted

技术标签:

【中文标题】带有 NSDictionary 的数组不想保存到 standardUserDefaults【英文标题】:Array with a NSDictionary doesn't want to save to the standardUserDefaults 【发布时间】:2010-10-11 20:52:52 【问题描述】:

我遇到了一个……奇怪的问题。

我将 NSDictionary 添加到 NSArray,然后将其保存为默认值。当我在用户默认值上检查该键的对象计数时,它说计数为 0,但“内存中”的数组具有该对象(因此计数为 1)。

代码及其给出的输出如下:

(数组是一个NSArray,默认是[NSUserDefaults standardUserDefaults])

- (void)addSongToQueue:(NSDictionary *)songData 
 [array addObject:songData];
 [defaults setObject:array forKey:@"OfflineArray"];
 [defaults synchronize];

#if DEBUG
 NSLog(@"Dictionary Data Received: %@", songData);
 NSLog(@"Object Count on Array: %u", [array count]);
 NSLog(@"Object Count on Defaults: %u", [[NSArray arrayWithArray:[defaults objectForKey:@"OfflineArray"]] count]);
 [defaults removeObjectForKey:@"OfflineArray"];
 [defaults synchronize];
#endif

我是这样称呼它的:

[className addSongToQueue:[NSDictionary dictionaryWithObjectsAndKeys:@"yadda", @"yadda", nil]];

这是输出:(我运行了两次,只是为了确保:P)

2010-10-11 21:47:35.807 AppName[1119:207] Dictionary Data Received: 
yadda = yadda;
    

2010-10-11 21:47:35.807 AppName[1119:207] Object Count on Array: 1
2010-10-11 21:47:35.808 AppName[1119:207] Object Count on Defaults: 0
2010-10-11 21:47:36.647 AppName[1119:207] Dictionary Data Received: 
yadda = yadda;
    

2010-10-11 21:47:36.647 AppName[1119:207] Object Count on Array: 2
2010-10-11 21:47:36.648 AppName[1119:207] Object Count on Defaults: 0

是的。我无法解决它。 :/

提前致谢。 :)

【问题讨论】:

看看这里寻找可能的解决方案,您需要对对象进行编码***.com/questions/471830/… 【参考方案1】:

你确定defaults 不为零吗?

【讨论】:

打赌就是这样。如果你尝试设置一个无效的对象,你会得到一个异常。 确实是这样,但这是因为我设置默认值的函数 = [NSUserDefaults standardUserDefaults];由于某种原因没有运行。话虽如此,回答接受了。谢谢!【参考方案2】:

您真的只是将NSString 实例放入字典中吗?每次我看到NSUserDefaults 的保存不完整,都是因为字典中的某些对象与 plist 格式不兼容。您只能在所有版本的 plist 格式上存储 NSNumberNSStringNSArrayNSDictionaryNSData(有些也允许 NSDate)。

【讨论】:

在真正的应用程序使用中,我正在保存 NSStrings 和 NSNumbers,但是正如您在此处看到的,即使使用 NSString 保存字典也不起作用。

以上是关于带有 NSDictionary 的数组不想保存到 standardUserDefaults的主要内容,如果未能解决你的问题,请参考以下文章

如何将带有 NSValue 对象的 NSDictionary 保存到文件中

使用带有数组的 NSDictionary 创建 JSON 文件

将 NSDictionary 保存到 plist

带有数组的 nsdictionary nspredicate 过滤

如何使用 NSManagedObject 将 NSDictionary 保存到 CoreData?

如何从 NSDictionary 中删除对象