我有两个实体 A 和 B。A 与 B 具有一对多关系。在更改 B 中的某些属性后,如何撤消 B 中的所有更改?我尝试过回滚方法,但这会影响 A 中的其他属性。
问问题
254 次
1 回答
1
尝试disableUndoRegistration
在对 A 进行任何更改之前调用 undoManager,并在对 AenableUndoRegistration
进行任何更改之后调用。
现在,把这段代码放在哪里?理想情况下,您会为您的 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
可以通过任何类型的控件,使用任何类型的访问器访问它显示或编辑或选择的对象。
于 2012-04-30T11:28:08.370 回答