すべての変更の前にプロジェクトの現在の状態を保存して、元に戻すとやり直しがそれらの状態内で前後に移動できるようにするアプリがあります。位置を保存するためのコードを変更すると、次のようになります。
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回押して最初に巻き戻すことができますが、やり直しは何もしません。REDOを呼び出すと、元に戻された最後のオブジェクトでセレクターにヒットするべきではありませんか?私はここで何を誤解していますか?