我有两个实体A和B。A与B具有一对多关系。更改B中的某些属性后,如何撤消B中的所有更改?我已经尝试过回滚方法,但这会影响A中的其他属性。
最佳答案
尝试在对A进行任何更改之前在undoManager上调用disableUndoRegistration
,并在对A进行任何更改之后立即调用enableUndoRegistration
。
现在,将该代码放在哪里?理想情况下,您可以为您的A类覆盖NSManagedObject中的某些方法,但是哪些方法呢?我认为validate
方法不起作用,至少不能用于禁用撤消注册,因为我认为在调用它们之前,更改可能已经在undoManager中进行了注册。使用will/didChangeValueForKey:
很有诱惑力-但类引用显示“您不得重写此方法”。
因此,我认为您在解决任何可能影响A的接口操作中都无法解决此问题。
编辑-这是您请求的示例:
- (IBAction) someAction:(id)sender {
BOOL isA = NO;
NSManagedObjectContext currentContext = nil;
if ([[sender objectControlledBySender] isKindOfClass:[subclassedManagedObjectA class]]) {
isA = YES;
currentContext = // get a ref to your current context, or just make it an unretained property of this controller's class
[currentContext.undoManager disableUndoRegistration];
}
// Make the changes to the object accessed via sender.
if (isA)
[currentContext.undoManager enbleUndoRegistration];
}
“objectControlledBySender”必定含糊不清,因为
sender
可以由任何类型的控件使用任何类型的对其显示,编辑或选择的对象进行访问的控件。关于iphone - undoManager用于coredata,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10378332/