gpt4 book ai didi

iphone - NSUndoManager 以及如何让重做工作

转载 作者:太空狗 更新时间:2023-10-30 03:55:20 26 4
gpt4 key购买 nike

我有一个应用程序,我想在每次更改之前保存项目的当前状态,以便撤消和重做能够在这些状态中来回切换。当我更改保存位置的代码时:

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];
}
}

replace self 函数只是获取项目状态属性并分发信息,以便恢复状态。

撤消非常有效,我可以执行 5 个步骤,然后点击撤消 5 次以倒回到开始,但重做根本不起作用!调用重做不应该导致它用最后一个被撤消的对象命中我的选择器吗?我在这里误解了什么?

最佳答案

我得到了这个工作,在撤消/重做调用的 replaceSelf 函数中,我添加了这段代码:

[undoManager registerUndoWithTarget:self selector:@selector(replaceSelf:) object:ps];

其中 ps 是撤消/重做完成之前的当前项目状态。这对我有用!

关于iphone - NSUndoManager 以及如何让重做工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13279166/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com