带有 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 格式上存储 NSNumber
、NSString
、NSArray
、NSDictionary
、NSData
(有些也允许 NSDate
)。
【讨论】:
在真正的应用程序使用中,我正在保存 NSStrings 和 NSNumbers,但是正如您在此处看到的,即使使用 NSString 保存字典也不起作用。以上是关于带有 NSDictionary 的数组不想保存到 standardUserDefaults的主要内容,如果未能解决你的问题,请参考以下文章
如何将带有 NSValue 对象的 NSDictionary 保存到文件中
使用带有数组的 NSDictionary 创建 JSON 文件
带有数组的 nsdictionary nspredicate 过滤