willTurnIntoFault被多次调用,导致崩溃
在
NSManagedObject
的子类中,当撤消一些最初创建相关对象的代码时,我的被覆盖的willTurnIntoFault
实现被调用两次。当尝试在密钥路径上双重注销KVO时,这会导致崩溃。
Apple文件称这是取消注册KVO的正确位置。
一些上下文 - 撤消操作涉及从其超级视图中删除模型的相应视图。视图保留了它的模型。
所以我的问题是:什么样的程序员错误会导致willTurnIntoFault
在NSManagedObject
的子类中被调用两次?
注意:以前我在这个类中重写了dealloc
,但后来才意识到这不推荐用于NSManagedObject的子类。我已将此代码移至-didTurnIntoFault
。我目前还没有覆盖Apple文档说你不应该覆盖的任何其他方法。
没有找到相关结果
已邀请:
2 个回复
嗓瑰
。这导致B的
方法被调用(其中
是B与A的关系)。不幸的是,这个方法检查了A的属性,导致A的断层被取消(请注意,在这种情况下,
不会被调用 - 我认为因为对象从未真正进入故障状态)。因此,我可能会稍后第二次调用
,并且该对象将再次尝试取消注册KVO,从而导致崩溃 - 就像在OP中一样。 对我来说,解决方案是将A的删除规则更改为级联,以便在A对象被删除时删除B对象并在
中取消注册KVO。这很重要,因为删除A仍然会导致在实际删除B之前将B的反向关系设置为nil。 注意
之前被调用但不是
。因此,如果您在两者中取消注册KVO,则需要保持某种状态以确保您尚未注册。
贸会