【发布时间】:2013-03-26 04:10:43
【问题描述】:
我有一个复杂的情况,我有一个视图控制器和几个子视图控制器。
情况A:当我更改子视图控制器时,我将更改记录在NSUndoManager中,并且undo调用子视图控制器中的undo方法并且工作正常。
-(void)setElementTransform:(NSString *)transform
{
NSUndoManager *undoManager = [Global sharedGlobalInstance].undoMgr;
[undoManager registerUndoWithTarget:self selector:@selector(setElementTransform:) object:self.element.transform];
self.element.transform = transform;
self.view.transform = CGAffineTransformFromString(transform);
}
情况 B: 这有点复杂——当我移除子视图控制器时,我在 NSUndoManager 中记录了撤消方法(在主视图控制器中)。当我撤消该删除时,NSUndoManager 调用主视图控制器中的撤消方法,该方法重新创建子视图控制器。这也很好用。
问题是,如果我先执行情形 A,然后执行情形 B,则撤消堆栈中有两个。我可以撤消情况 B,但情况 A 引用了不再存在的子视图控制器中的撤消方法(在情况 B 中通过删除和撤消将其删除并重新创建)。
我认为没有任何方法可以更新 NSUndoManager 以便我可以更改对旧子视图控制器的引用?
我还能如何应对?
【问题讨论】:
标签: ios objective-c nsundomanager