问题描述
|
如果我@synthesize我的财产(艺术家),一切正常
为keyPath artist.name添加观察者
调用[myObj setValue:newArtist forKey:@ \“ artist \”];
成功。
如果我以此覆盖setter方法:
- (void)setArtist:(GVArtist *)artist
{
GVArtist *oldArtist = _artist;
[self willChangeValueForKey:@\"artist\"];
_artist = [artist retain];
[self didChangeValueForKey:@\"artist\"];
[oldArtist release];
}
然后再做一次,我得到:
无法为的密钥路径“ artist.name”的观察者进行更新,这很可能是因为未发送适当的KVO通知而更改了密钥“ artist”的值。检查MyObject类的KVO兼容性。
不过对我来说很好。
解决方法
您不需要
willChangeValueForKey:
和didChangeValueForKey:
东西;只要您的设置者的名字是KVO兼容的(即ѭ3),所有操作都会自动处理。当您在myObj
上注册观察者时,Cocoa动态地创建对象的子类并自动添加willChangeValueForKey:
和didChangeValueForKey:
调用。因此,您的安装程序不需要手动进行操作,这可能会导致您遇到问题。