我正在尝试将我的一个对象上的CGColorRef
绑定到shadowColor
的“CALayer
”属性。不幸的是,我无法弄清楚这一点 - 它可能非常简单!
CGColorRef实现为属性:
@property (readwrite) CGColorRef labelShadowColor;
我的约束也很直接:
[aLayer bind:@"shadowColor" toObject:aScreen withKeyPath:@"labelShadowColor" options:nil];
我要解开的地方是valueForUndefinedKey:
- 我如何为CGColorRef
实现此目标?我目前正在获取样板:
2009-08-09 03:13:50.056 Hyperspaces[33161:a0f] An uncaught exception was raised
2009-08-09 03:13:50.060 Hyperspaces[33161:a0f] [<HSScreen 0x100533930> valueForUndefinedKey:]: this class is not key value coding-compliant for the key labelShadowColor.
2009-08-09 03:13:50.064 Hyperspaces[33161:a0f] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<HSScreen 0x100533930> valueForUndefinedKey:]: this class is not key value coding-compliant for the key labelShadowColor.'
我可以通过在两端放置NSColor
属性并在颜色更改时手动设置CALayer
的“shadowColor
”来解决此问题,但这似乎不够优雅。< / p>
答案 0 :(得分:1)
好的,所以这是我错过的一个提示(以及我是如何解决的):
您无法合成CGColorRefs(@synthesize someProperty;
) - 您需要声明属性@dynamic
并实现getter / setter,如下所示:
@dynamic labelShadowColor;
- (CGColorRef)labelShadowColor {
return labelShadowColor;
}
- (void)setLabelShadowColor:(CGColorRef)aShadowColor {
if (CGColorEqualToColor(labelShadowColor,aShadowColor)) return;
CGColorRelease(labelShadowColor);
if (aShadowColor != NULL) {
labelShadowColor = CGColorRetain(aShadowColor);
}
}
然后您还需要在班级中定义valueForUndefinedKey:
:
- (id)valueForUndefinedKey:(NSString *)key {
if ([key isEqualToString:@"labelShadowColor"]) {
return (id)self.labelShadowColor;
}
return [super valueForUndefinedKey:key];
}
完成这两件事之后,我的绑定就开始了!