我有一个应用程序,我想在每次更改之前保存项目的当前状态,以便撤消和重做能够在这些状态中来回切换。当我进行更改以保存位置的代码是:
if(!undoManager){
undoManager = [[NSUndoManager alloc] init];
}
[[undoManager prepareWithInvocationTarget:self] replaceSelf:currentState];
我的撤消/重做功能:
-(void)undo{
if(undoManager){
[undoManager disableUndoRegistration];
[undoManager undo];
[undoManager enableUndoRegistration];
}
}
-(void)redo{
if(undoManager){
[undoManager disableUndoRegistration];
[undoManager redo];
[undoManager enableUndoRegistration];
}
}
替换自我功能只是获取项目状态属性并分发信息以便恢复状态。
撤消工作完美,我可以执行 5 个步骤,然后点击撤消 5 次回到开始,但重做什么都不做!调用重做不应该导致它用最后一个撤消的对象击中我的选择器吗?我在这里误解了什么?
最佳答案
我得到了这个工作,在被撤消/重做调用的 replaceSelf 函数中,我添加了以下代码:
[undoManager registerUndoWithTarget:self selector:@selector(replaceSelf:) object:ps];
其中 ps 是撤消/重做完成之前的当前项目状态。
这让它为我工作!