Я остановился на двухэтапном подходе.Первым шагом было создание фиктивного элемента отмены, который очищает стек повторения.Затем мне просто нужно было удалить этот элемент отмены, и оба стека были чистыми.
Я смог использовать self
в качестве фиктивной цели отмены, поскольку у меня нет каких-либо фактических действий отмены, связанных скласс, содержащий код.self
можно заменить любым объектом, который не вносит вклад в стек отмены.
Трюк вызывал removeAllActionsWithTarget
с задержкой, в противном случае он не дает эффекта.
// End the open undo grouping
[undoManager endUndoGrouping];
// Perform the undo operation, which gets pushed onto the Redo stack
[undoManager undo];
// Add a dummy Undo item to clear the Redo stack
[undoManager registerUndoWithTarget:self selector:nil object:nil];
// Remove the dummy item with a delay, pushing it to the next run loop cycle
[undoManager performSelector:@selector(removeAllActionsWithTarget:)
withObject:self
afterDelay:0.0];