Xcode用户默认无法识别的选择器错误

时间:2013-01-04 17:40:56

标签: xcode unrecognized-selector defaults

我开始在Cocoa上使用User Defaults并且我得到一个[NSConcreteData alphaComponent]:无法识别的选择器发送到实例0x100123660错误。这是源代码:

AppDelegate.m文件:

- (void)awakeFromNib{
NSColor *myColor = [NSColor greenColor];
[PreferencesController setDefaultColor:myColor];
NSColor *color = (NSColor *)[PreferencesController defaultColor];
NSLog(@"Default color : %@ - %@",(NSColor *)color, [NSColor greenColor]);
[tableView setBackgroundColor:color];
[colorWell setColor:color];
}

PreferencesController.m文件:

+ (NSColor *)defaultColor{
NSColor * aColor;
NSData *theData=[[NSUserDefaults standardUserDefaults]      valueForKey:TableViewBackgroundColorKey];
if (theData != nil)
    aColor = (NSColor *)[NSUnarchiver unarchiveObjectWithData:theData];
return aColor;
}

+ (void)setDefaultColor:(NSColor *)color{
NSData *theData=[NSArchiver archivedDataWithRootObject:[NSArchiver archivedDataWithRootObject:color]];
[[NSUserDefaults standardUserDefaults] setObject:theData  forKey:TableViewBackgroundColorKey];
}

NSLog的返回值为:

<040b7374 7265616d 74797065 6481e803 84014084 8484074e 53436f6c 6f720084 84084e53
4f626a65 63740085 84016301 84046666 66660001 000186> - NSCalibratedRGBColorSpace 0 1 0 1

因此+ (NSColor *)defaultColor返回的值不是NSColor,当然也不是[NSColor greeenColor]

我也收到错误-[NSConcreteData alphaComponent]: unrecognized selector sent to instance 0x100184050,我认为必定是因为没有为所提到的方法返回NSColor而导致错误。

请帮我调试。

感谢。

1 个答案:

答案 0 :(得分:0)

在以用户默认值存储时,您必须以特殊方式处理NSColor。 NSColor不是可以在属性列表中表示的对象;有关代码示例,请参阅Storing NSColor in User Defaults