这是否符合关键价值?

时间:2011-05-26 17:39:27

标签: objective-c key-value-observing

如果我@synthesize我的财产(艺术家)一切正常

  1. 为keyPath artist.name
  2. 添加观察者
  3. 致电[myObj setValue:newArtist forKey:@“artist”];
  4. 成功。
  5. 如果我用这个覆盖setter方法:

    - (void)setArtist:(GVArtist *)artist
    {
       GVArtist *oldArtist = _artist;
    
       [self willChangeValueForKey:@"artist"];
       _artist = [artist retain];
       [self didChangeValueForKey:@"artist"];
    
       [oldArtist release];
    }
    

    再做一遍,我明白了:

    无法为观察者更新关键路径“artist.name”,很可能是因为键“艺术家”的值在没有发送适当的KVO通知的情况下发生了变化。检查MyObject类的KVO兼容性。

    虽然看起来不错......?

1 个答案:

答案 0 :(得分:4)

您不需要willChangeValueForKey:didChangeValueForKey:内容;只要您的setter的名称符合KVO(-setArtist:即可。)当您在myObj上注册观察者时,Cocoa动态地创建对象的子类并添加{{1 }}和willChangeValueForKey:自动调用。因此,您的二传手不需要手动执行这些操作,这可能会导致您的问题。