1

我正在尝试将CGColorRef我的一个对象上的 a 绑定到 a 的 " 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在两端放置一个属性并在颜色更改时手动设置CALayershadowColor”来解决此问题,但这似乎不优雅。

4

1 回答 1

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];
}

一旦完成了这两件事,我的绑定就开始行动了!

于 2009-08-08T17:34:57.140 回答