我想不出更好的方式来提出这个问题,所以如果标题毫无意义,我会道歉。基本上,我在控制器级别为我的应用程序的一部分实现了撤销/重做,我不断遇到这个琐碎的问题。我有两种方法:
- (void)addNote:(BSDNote *)note;
- (void)duplicateNote:(BSDNote *)note;
在-addNote:
方法中,note
对象被添加到可变数组中。我还更新了其他一些东西,但是出于我的例子的目的,我们只是说一个对象被添加到一个数组中。然而,在将对象添加到数组之前,我使用文档NSUndoManager
注册撤消操作,如下所示:
if ( [self.undoManager levelsOfUndo] > 0 ) {
[self.undoManager endUndoGrouping];
[self.undoManager beginUndoGrouping];
}
[self.undoManager registerUndoWithTarget:self selector:@selector(deleteNote:) object:note];
[self.undoManager setActionName:NSLocalizedString(@"Add Note", @"Add Note undo action name")];
它本身就有意义,一切都很好。我不确定的是从-addNote:
方法中调用-duplicateNote:
方法。
在-duplicateNote:
方法中,复制note
对象,然后使用-addNote:
方法将其添加到可变数组中。由于我正在复制对象,我想在-duplicateNote:
的堆栈中添加撤消操作,而不是-addNote:
。
我唯一能想到的是在-duplicateNote:
方法中做这样的事情:
[self.undoManager registerUndoWithTarget:self selector:@selector(deleteNote:) object:note];
[self.undoManager setActionName:NSLocalizedString(@"Duplicate Note", @"Duplicate Note undo action name")];
// I make a copy of the note here (noteCopy), along with other miscellaneous stuff.
[self.undoManager disableUndoRegistration];
[self addNote:noteCopy];
[self.undoManager enableUndoRegistration];
我是否认为这是一种处理这种情况的好方法?撤消/重做操作的整个“分组”让我的头部受到伤害,所以我确定我忽略了某些东西,或者有一种更好的方式。如果有人知道这种更好的方式,你会介意向我解释(就像我五岁)吗?
答案 0 :(得分:0)