我有一个应用程序,我想在每次更改之前保存项目的当前状态,以便撤消和重做能够在这些状态中来回一步。当我进行更改时,代码保存位置是:
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次倒带以倒带到一开始,但是重做根本没有做任何事情!不应该调用重做是否会导致它使用撤消的最后一个对象击中我的选择器?我在这里误会了什么?
我得到了这个工作,在撤消/重做的替换功能中,我添加了此代码:
[undoManager registerUndoWithTarget:self selector:@selector(replaceSelf:) object:ps];
ps是当前的项目状态,然后再进行撤消/重做。这使它对我有用!