0

我有一个详细说明所选表格行的面板。显然,面板的显示经常需要更新,我已经将该任务推到了 NSWindowController 子类中。

我希望自定义 NSWindowController 具有@propertys 用于文本字段中的字符串值和 NSImageViews 中的图像值之类的东西。因为我不需要访问器中的新代码,所以我想要@synthesize它们。不幸的是(对我来说),没有选项可以在@synthesize property=ivar.

显而易见的解决方案是编写我自己的表单访问器

- (void)setTitle:(NSString *)title
{
    [titleTextField setStringValue:title];
}

- (NSString *)title
{
    return [titleTextField stringValue];
}

但我宁愿不必为几个属性中的每一个手动执行此操作。

有没有更简单的方法?也许是设置属性以转发到objectValue另一个对象的特定属性(除了等实际上不是正确的属性)的通用方法?

4

3 回答 3

1

如果你在你的类中实现valueForUndefinedKey:,你应该得到最后的机会来解决任何键值路径查找并将它们全部转发给另一个对象。但是,这肯定不是高效的,并且只有在您传递的大多数属性名称与目标对象的属性名称匹配时才会给您带来显着的收益。

于 2010-11-28T19:14:22.037 回答
0

你有一个矛盾,你说你不需要在访问器中的新代码,所以你想合成它们,但是你需要的代码是完全新的。属性是一些常见情况的语法糖,这不是其中之一。

有几种方法可以做你想做的事,例如。正如@Justin 建议覆盖 setvalue:forundefinedkey: - 你只需要查找正向目标,但属性的糖不适合这个。

于 2010-11-28T23:41:51.170 回答
0

我认为进行任何类型的转发都不会有用,因为文本字段上的属性名称将与您班级中的属性名称不同。

通过公开字符串属性从文本字段中抽象出来当然是一个好主意,但是如果您想避免编写此样板文件,您可能会发现将文本字段本身作为属性简单地公开是可以接受的。您可以在一些 Apple 的 API 中看到这一点,尤其是在 iPhone 上,在 SDK 3.0 中,而不是像text现在的表格单元格那样具有属性textLabel。如果被调用者想要以某种方式自定义标签或文本字段,它会更简单并且允许更多自定义。

于 2010-11-28T19:32:42.443 回答