观察NSManagedObject属性的变化:如何避免循环?

时间:2013-06-08 08:20:19

标签: cocoa core-data nsmanagedobjectcontext nsnotificationcenter

在我的应用程序中,我观察了托管对象的属性。更改可能会导致某些其他属性的调整,因此托管对象本身会收到已更改属性的消息。这些更改通过Interface Builder中设置的绑定发生。

我在托管对象的实现中有以下方法:

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ( !processingChange )
    {
        processingChange = YES;

        *** DO STUFF TO THIS MANAGED OBJECT'S PROPERTIES ***

        [self.managedObjectContext processPendingChanges];

        processingChange = NO;
        return;
    }
}

processingChange布尔值是为了避免无休止的“通知循环”,但它没有按照我的预期工作(加上它看起来像一个真正的脏黑客)。

必须有另一种方法来做到这一点。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

使用MOM'setPrimitiveValue:forKey:它不会生成KVO

答案 1 :(得分:0)

我认为无需“手动”发送通知,请查看:https://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html#//apple_ref/doc/uid/10000177i

  

observeValueForKeyPath:ofObject:change:context:method is   当被观察属性的值为时自动调用   以符合KVO标准的方式更改,或者是否依赖于它的密钥   改变了。

也许这甚至是错误?