Базовые данные и NSUndoManager - порядок удаления / вставки с отменой - PullRequest
2 голосов
/ 25 февраля 2012

У меня есть изображение, состоящее из нескольких слоев (управляемый объект), каждый из которых представлен видом. Когда я очищаю эти слои, я удаляю их спереди назад, ожидая, что отмена восстановит их в обратном порядке, спереди назад, поэтому создаю их виды сзади и спереди, давая мне правильный порядок. Однако порядок восстановления слоев (управляемого объекта), по-видимому, случайный. Есть ли способ обеспечить повторную вставку слоев в обратном порядке, в котором они были удалены (поскольку отмена - это, как правило, стек, это то, что я ожидал).

Обратите внимание, что все удаления слоев происходят в пределах одной группы отмены, поэтому не то, чтобы я нажимал кнопку отмены несколько раз, это все в одном вызове отмены.

[self.managedObjectContext.undoManager beginUndoGrouping];
//remove all layers but the bg
NSMutableOrderedSet * layers = self.interactionView.currentSketchPage.layersSet;
for (int i = layers.count-1; i >= 1; i--) {
    [self.managedObjectContext deleteObject:[layers objectAtIndex:i]];
}
[self.managedObjectContext.undoManager endUndoGrouping];

Обратите внимание, что удаление некоторых из этих слоев может привести к удалению других объектов из каскада, так что, возможно, это также влияет на него?

Редактировать: хотел отметить, что переключение порядка цикла for не меняет порядок восстановления слоев.

...