Cocoa 观察NSManagedObject属性的变化:如何避免循环?
在我的应用程序中,我观察托管对象的属性。更改可能会导致对其某些其他属性进行调整,因此托管对象本身会收到更改属性的消息。这些更改是通过在Interface Builder中设置的绑定进行的 在托管对象的实现中,我有以下方法:Cocoa 观察NSManagedObject属性的变化:如何避免循环?,cocoa,core-data,nsmanagedobjectcontext,nsnotificationcenter,Cocoa,Core Data,Nsmanagedobjectcontext,Nsnotificationcenter,在我的应用程序中,我观察托管对象的属性。更改可能会导致对其某些其他属性进行调整,因此托管对象本身会收到更改属性的消息。这些更改是通过在Interface Builder中设置的绑定进行的 在托管对象的实现中,我有以下方法: -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if ( !pr
-(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
布尔值是为了避免无休止的“通知循环”,但它并没有像我预期的那样工作(而且它看起来像一个真正的肮脏的黑客)
必须有另一种方法来做到这一点。有什么建议吗?我认为没有必要“亲自”发送通知,请看: 对象:更改:上下文:方法的observeValueForKeyPath: 当观察到的属性的值为 以兼容KVO的方式更改,或者如果它所依赖的密钥 改变了
也许这甚至是个错误?我认为没有必要“亲自”发送通知,请看: 对象:更改:上下文:方法的observeValueForKeyPath: 当观察到的属性的值为 以兼容KVO的方式更改,或者如果它所依赖的密钥 改变了
也许这甚至是个错误?使用MOMs
setPrimitiveValue:forKey:
它不会生成KVO使用MOMssetPrimitiveValue:forKey:
它不会生成KVO这看起来真的很有希望,至少我还没有意识到这会发生。也许我调用了-observeValueForKeyPath:
两次。我将看看是否可以在没有手动通知的情况下调用该方法!我想我误读了答案,也许我不清楚我是如何设置的。我观察到托管对象中的更改,这些更改是通过界面生成器中的绑定发生的。我不会发送手动通知,我会编辑问题来澄清。对不起,这有什么关系?@Daij Djan:看看问题的编辑历史(以及提问者对这个答案的评论)。这个答案是为问题的原始版本而写的。这看起来很有希望,至少我可以说我没有意识到这会发生。也许我调用了-observeValueForKeyPath:
两次。我将看看是否可以在没有手动通知的情况下调用该方法!我想我误读了答案,也许我不清楚我是如何设置的。我观察到托管对象中的更改,这些更改是通过界面生成器中的绑定发生的。我不会发送手动通知,我会编辑问题来澄清。对不起,这有什么关系?@Daij Djan:看看问题的编辑历史(以及提问者对这个答案的评论)。此答案是针对问题的原始版本编写的。如果我的托管对象是EventType,我是否可以在不生成KVO消息的情况下向其多对多关系添加新事件-addEventsObject
?我认为您需要设置基础集合以避免KVOI如果我的托管对象是EventType,我是否可以在不生成KVO消息的情况下向其对多关系添加新事件-addEventsObject
?我认为您需要设置基础设置以避免KVO