2012-12-04 33 views
0

假設我有兩個原子對象方法operation1operation2,它們將自己的撤消操作註冊到undoManager。如果我批量調用operation3,即調用前兩個操作和組,撤消回調時使用beginUndoGrouping/endUndoGrouping,則撤消時,NSUndoManager不會對重做操作進行分組。如何使NSUndoManager映射撤消組重做組?與NSUndoManager的嵌套重做組

示例代碼:

- (void)operation3 
{ 
    [undoManager beginUndoGrouping]; 
    [self operation1]; // [undoManager setActionName:@"op1"]; 
    [self operation2]; // [undoManager setActionName:@"op2"]; 
    [undoManager endUndoGrouping]; 
    [undoManager setActionName:@"op3"]; 
    // call operation3 -> "Edit - Undo op3" -- OK 
    // press Command+Z -> "Edit - Redo op1" -- not OK 
} 

回答

0

您必須撤消時重新設置操作名稱。我認爲你在撤消期間只設置「op1」。

+0

看來,我在複合方法中組合可撤銷操作的意圖是錯誤的:我最終寫了很多樣板代碼,只是爲了使'撤銷/重做'複合操作堆棧按正確的順序堆棧。 – UncleAli