在我的界面中,我有一个
NSTextField
,它的 value
绑定到了一个 NSArrayController
的 selection.selectedType.title
。所有的 NSArrayController
对象都是自定义对象,每个对象都有两个方法:- (MYType *)selectedType;
- (void)setSelectedType: (MYType *)type;
这段代码中没有一个名为selectedType的iVar变量。然而,它们确实有一个持有所有MYType
对象的iVar变量。代码可归纳为以下形式:
- (MYType *)selectedType
{
if (someIndex == 0)
return [types objectAtIndex: 0];
else
return [self typeWithIndex: someIndex];
}
- (void)setSelectedType: (MYType *)type
{
someIndex = [type index];
}
MYType
对象有一个相应的@property
和synthesize
,其中包含一个NSString *title
iVar。
每当我调用setSelectedType:
时,在NSTextField
中立即看到更改,并且一切似乎都正常工作,但是我收到了一条日志消息:
无法删除观察者NSArrayController 0x141160,因为该值的键“selectedType”在没有发送适当的KVO通知的情况下已更改。请检查MYType类的KVO兼容性。
我试图使用willChangeValueForKey:
和didChangeValueForKey:
封装setSelectedType:
方法,然后我仍然收到了一条日志消息,但是这是不同的:
无法删除观察者NSKeyValueObservance 0x1c7570,因为它未注册为观察者。