objective-c - 为什么 cocoa 绑定(bind)不能与框架类的 typedef 一起使用

标签 objective-c cocoa typedef cocoa-bindings

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

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

如果颜色属性定义为:

 @property (strong, nonatomic) MyColor *color;

MyColor定义为:

typedef NSColor MyColor;

但是当 color 属性定义为 NSColor 时一切正常?

最佳答案

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

测试表明:

typedef AnyOldClass SomeOldClass;

以及不同类中的属性:

@property AnyOldClass *anyclass; // from class A

@property SomeOldClass *someclass; // from class B

然后尝试使用 bind:toObject:withKeyPath:options: 绑定(bind)失败。如果 typedef 用于值类型(例如 double),它似乎确实有效(即非详尽测试)。

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

typedef AnyOldClass *SomeOldClass;

@property SomeOldClass someclass; // from class B

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

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

奇怪又有趣。向 Apple 报告此事,除非很快有人介入并作出解释。

在 Xcode 5.0.2/Clang 4.2 上完成测试

关于objective-c - 为什么 cocoa 绑定(bind)不能与框架类的 typedef 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22075472/

相关文章:

c++ - 是一个 typedef 到 self 允许在模板参数上

c - 如何在C程序中指向结构体?

c++ - 为什么模板 typedef 是 C++(不是 C++11)中的一个问题

ios - HTTP 状态代码 411 - 需要的长度

cocoa - NSTextView Action 触发换行

objective-c - 用通配符/正则表达式替换 NSString - cocoa

cocoa - 打开工作表时启用与 NSWindow 的交互

ios - 更新了适用于 iOS 7 的 TBXML : How to include TBXML in Xcode 5, 的指南

ios - 它对 NSMutableArray 进行排序吗?

objective-c - 找不到与应用程序标识符 '' 匹配的有效配置文件