Способ автоматической поддержки отмены Cappuccino работает, сообщая менеджеру отмены действий, какие свойства следует отменить. Например, представьте, что вы управляете записями студентов, вы можете сделать что-то вроде:
[theUndoManager observeChangesForKeyPath:@"firstName" ofObject:theStudent];
[theUndoManager observeChangesForKeyPath:@"lastName" ofObject:theStudent];
Теперь, независимо от того, как имя ученика изменяется в пользовательском интерфейсе, нажатие отмены автоматически вернет его обратно. Cappuccino также автоматически обрабатывает объединяющиеся изменения в одном и том же цикле выполнения, помечая документ как «грязный» (нуждающийся в сохранении), когда есть элементы в стеке отмены, и т. Д. И т. Д. (Другими словами, вышеприведенное должно быть ВСЕ, что вам нужно сделать для поддержки отменить).
В качестве другого примера, если вы хотите, чтобы добавления и удаления учеников были отменены, вы бы сделали следующее:
[theUndoManager observeChangesForKeyPath:@"students" ofObject:theClass];
Поскольку "ученики" - это массив учеников в классе, то добавления и удаления из этого массива будут отслеживаться.