-1

可能重复:
将 UIColor 保存到 NSUserDefaults 并从中加载

我想初始化用户默认值,制作 NSDictionary,输入数据和 refisterDefaults。但是这段代码有错误。

//if UserFilter entry is nothing, create.
NSDictionary *defaultFilter = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:0] forKey:@"UserFilter"];
[userDefaults registerDefaults:defaultFilter];

//if UserBadgeColor entry is nothing, create.
UIColor *color = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
NSValue *valColor = [NSValue value:&color withObjCType:@encode(UIColor)];
NSDictionary *defaultBadgeColor = [NSDictionary dictionaryWithObject:valColor forKey:@"UserBadgeColor"];
[userDefaults registerDefaults:defaultBadgeColor];

运行,UserFilter部分没有问题。但 UserBadgeFilter 部分有错误。错误行在最后。

谢谢。

4

1 回答 1

1

从手册:

NSUserDefaults 类提供方便的方法来访问常见类型,例如浮点数、双精度数、整数、布尔值和 URL。默认对象必须是一个属性列表,即以下实例(或集合实例的组合):NSData、NSString、NSNumber、NSDate、NSArray 或 NSDictionary。如果要存储任何其他类型的对象,通常应该将其归档以创建 NSData 的实例。

但是你可以简单地使用 NSData,所以在你的情况下:

UIColor *color = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
NSData* colorData= [NSKeyedArchiver archivedDataWithRootObject: color];
NSDictionary *defaultBadgeColor = [NSDictionary dictionaryWithObject: colorData forKey:@"UserBadgeColor"];
[userDefaults registerDefaults:defaultBadgeColor];

当您从默认值中读取数据时,使用NSKeyedUnarchiver将数据解码回 UIColor 。

于 2013-01-05T20:25:30.770 回答