1

在我的应用程序中,我观察托管对象的属性。更改可能会导致其某些其他属性的调整,因此托管对象本身会收到更改属性的消息。这些更改通过在 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“通知循环”,但它没有像我预期的那样工作(而且它看起来像一个真正的肮脏黑客)。

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

4

2 回答 2

1

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

于 2013-06-08T13:58:29.553 回答
0

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

当观察到的属性的值以符合 KVO 的方式更改或它所依赖的键发生更改时,会自动调用 observeValueForKeyPath:ofObject:change:context: 方法。

也许这甚至是错误?

于 2013-06-08T08:26:13.533 回答