在我的应用程序中,我观察了托管对象的属性。更改可能会导致某些其他属性的调整,因此托管对象本身会收到已更改属性的消息。这些更改通过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
布尔值是为了避免无休止的“通知循环”,但它没有按照我的预期工作(加上它看起来像一个真正的脏黑客)。
必须有另一种方法来做到这一点。有什么建议吗?
答案 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标准的方式更改,或者是否依赖于它的密钥 改变了。
也许这甚至是错误?