Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone NSUserDefaults赢得';不要保存字典_Iphone_Objective C_Ipad - Fatal编程技术网

Iphone 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:

我正在编写一个使用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: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";
}