使用UIColor RGB black作为NSMutableDictionary中的键时出现问题

时间:2010-12-16 03:34:39

标签: iphone key nsmutabledictionary uicolor copywithzone

我可以整天将UIColor对象设置为NSMutableDictionary中的键,一切都很好,很开心......

例如:

[myDict setObject:foo forKey:[UIColor redColor]]; 

这很好用......除非我尝试使用以下内容:

UIColor *black = [[UIColor alloc] initWithRed:0 green:0 blue:0 alpha:1];
[myDict setObject:foo forKey:black];

这总是让我:

- [UIDeviceRGBColor copyWithZone:]:无法识别的选择器发送到实例0x691be80

我在RGB色彩空间中定义黑色的原因对于这个问题并不重要,只要知道我必须这样定义它。我不明白的是为什么这只有这种颜色会导致我出现问题,为什么错误是copyWithZone错误?

对于记录,[UIColor blackColor]用作键,但由于它不是RGB色彩空间,因此不适合我的应用程序。

1 个答案:

答案 0 :(得分:4)

看起来更好的问题是“为什么每个其他UIColor实例都作为关键”?

NSMutableDictionary中的键“must conform to the NSCopying protocol”。 UIColor个对象不符合该协议per the documentation,因此理论上无法将它们用作字典中的键。

在实践中,我可能会猜到你正在从UIColor隐藏的类集群中获取各种具体子类,并且可能其中一些实际上支持NSCopying,但是UIDeviceRGBColor似乎没有。

您可以将UIColor对象包装在支持NSCopying 支持NSCopying的瘦包装器对象中,并覆盖-isEqualTo:等以使比较正常工作,然后在字典中使用这些包装器