为什么cocoa绑定不能使用框架类的typedef

时间:2014-02-27 17:10:59

标签: objective-c cocoa typedef cocoa-bindings

为什么在尝试将NSColorWell值绑定到某个属性时出现错误...

valueForUndefinedKey: this class is not key value coding-compliant for the key color.

如果 color 属性定义为:

 @property (strong, nonatomic) MyColor *color;

MyColor 定义为:

typedef NSColor MyColor;

但是当 color 属性被定义为NSColor?

时,一切正常

1 个答案:

答案 0 :(得分:2)

您似乎发现了一个错误,因为typedef应该是透明的而不是改变行为。

测试显示:

typedef AnyOldClass SomeOldClass;

和不同类中的属性:

@property AnyOldClass *anyclass; // from class A

@property SomeOldClass *someclass; // from class B

然后尝试将to绑定到bind:toObject:withKeyPath:options:失败。如果typedef用于值类型(例如double),它似乎有效(即非穷举测试)。

此外,如果更改为 ,则可以工作。

typedef AnyOldClass *SomeOldClass;

@property SomeOldClass someclass; // from class B

这是typedef用于指针类型本身。然而,不是强调可以,它在编译之间似乎并不一致 - 如果它适用于二进制文件它总是适用于该二进制文件,但重新编译可能会破坏它。

我没有检查过元数据(至少还有......)

奇怪而有趣。向Apple报告,除非有人尽快提出解释。

在Xcode 5.0.2 / Clang 4.2上完成测试