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

2019-10-18 05:38发布

在我的应用程序,我观察到一个管理对象的属性。 的变化可导致在它的一些其它性质的调整,所以被管理的对象本身接收改变的属性的消息。 这些变化发生的通过被设置在界面生成器绑定。

我在管理对象的实现下面的方法:

-(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布尔目的是避免无限“通知循环”,但它不工作,我希望(加上它看起来像一个真正的肮脏的黑客)。

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

Answer 1:

用妈妈的setPrimitiveValue:forKey:它不产生KVOs



Answer 2:

我认为没有必要“手动”发送通知,一起来看看: https://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html#//apple_ref/doc/ UID / 10000177i

所述observeValueForKeyPath:ofObject:变化:上下文:当观察属性的值中的柔性KVO的方式被改变的方法自动调用,或者如果其所依赖一个键被改变。

也许这就是甚至错误了吗?



文章来源: Observing changes in the properties of an NSManagedObject: how to avoid looping?