此键值兼容吗?

| 如果我@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:
调用。因此,您的安装程序不需要手动进行操作,这可能会导致您遇到问题。     

要回复问题请先登录注册