Iphone NSUserDefaults赢得';不要保存字典
我正在编写一个使用NSUserDefaults作为数据存储机制的应用程序,在尝试保存数据时遇到了一个问题(符合属性列表协议): 我得到这个输出:Iphone NSUserDefaults赢得';不要保存字典,iphone,objective-c,ipad,Iphone,Objective C,Ipad,我正在编写一个使用NSUserDefaults作为数据存储机制的应用程序,在尝试保存数据时遇到了一个问题(符合属性列表协议): 我得到这个输出: 2010-06-29 17:17:09.929 MyAdventureBook[39892:207] Existing albums: (null) 2010-06-29 17:17:09.930 MyAdventureBook[39892:207] test 2010-06-29 17:17:09.931 MyAdventureBook[39892:
2010-06-29 17:17:09.929 MyAdventureBook[39892:207] Existing albums: (null)
2010-06-29 17:17:09.930 MyAdventureBook[39892:207] test
2010-06-29 17:17:09.931 MyAdventureBook[39892:207] *** -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '{
album = test;
}' of class 'NSCFDictionary'.
相册的描述方法如下所示:
- (NSString *)description
{
// Convert to a NSDictionary for serializing
if (!title) title = @"";
if (!date) date = [NSDate dateWithTimeIntervalSinceNow:0];
if (!coverImage) coverImage = @"";
if (!images) images = [[NSArray alloc] initWithObjects:@"",nil];
//NSDictionary *dict = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:title,date,coverImage,images,nil] forKeys:[NSArray arrayWithObjects:@"title",@"date",@"coverImage",@"images",nil]];
//NSDictionary *dict = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:title,nil] forKeys:[NSArray arrayWithObjects:@"title",nil]];
//return [dict description];
return @"test";
}
所有注释掉的行都有相同的结果,所以我只是决定看看NSString“test”是否可以工作,而它(当然)不能工作。NSUserDefaults总是返回不可变的对象,所以不能将它们强制转换为可变的。执行
[prefs objectForKey:@“我的冒险书相册”]mutableCopy]
(完成后记得将其释放)。但是您放在字典中的对象,相册*
很可能不是属性列表对象,是吗?要使其工作,每个对象都需要是属性列表对象。description
方法不足以实现这一点
作为一个解决方案,您可以使用<代码> NSCODENG/<代码>和<代码> NKEKEDIGRIVER 将您的字典写入到<代码> NStase中,您可以将其存储在首选项中。
< P>您只能将基本的基础类型放入属性列表中。NSUserDefaults将首选项作为属性列表写出。有关允许的类型,请参见此处。简而言之,就是数字、字符串、数据、日期、数组和字典。字典必须有字符串键。Nope,相同的结果:**-[NSUserDefaults setObject:forKey:::]:尝试插入类“NSCFDictionary”的非属性值“{album=test;}”。- (NSString *)description
{
// Convert to a NSDictionary for serializing
if (!title) title = @"";
if (!date) date = [NSDate dateWithTimeIntervalSinceNow:0];
if (!coverImage) coverImage = @"";
if (!images) images = [[NSArray alloc] initWithObjects:@"",nil];
//NSDictionary *dict = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:title,date,coverImage,images,nil] forKeys:[NSArray arrayWithObjects:@"title",@"date",@"coverImage",@"images",nil]];
//NSDictionary *dict = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:title,nil] forKeys:[NSArray arrayWithObjects:@"title",nil]];
//return [dict description];
return @"test";
}