如何输入UIColor到用户默认值?

时间:2013-01-05 19:30:42

标签: iphone objective-c xcode nsuserdefaults uicolor

  

可能重复:
  Saving UIColor to and loading from 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部分有错误。 错误行是最后一次。

感谢。

1 个答案:

答案 0 :(得分: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。