NSTextStorage, Core Data и NSUndoManager - Как отслеживать изменения?
Представьте себе управляемый объект, который имеет временный атрибут типа NSTextStorage
, Это архивируется в двоичный файл NSData
объект на сохранении. При редактировании я поменяю textStorage
из NSTextView
так что все изменения идут прямо в текстовое хранилище. Таким образом, я могу обновить другие управляемые объекты, которые связаны с определенными текстовыми местоположениями, не оставляя контекст в несогласованном состоянии, а другие элементы пользовательского интерфейса, использующие то же текстовое хранилище, обновляются немедленно.
Проблема в том, что контекст управляемого объекта undoManager
не знает, что делать с хранилищем текста при отмене / повторении. Я думаю, это потому, что действия отмены обрабатываются текстовым представлением.
Поэтому я подумал, что могу просто сериализовать / архивировать хранилище текста при каждом изменении и заменить содержимое хранилища текста его неархивированным содержимым. Я проверял это даже с более длинными текстовыми документами, и это не является реальным узким местом на Mac. Но как мне заставить менеджера отмены использовать его? Или есть совершенно другой способ заставить его работать.
Я разместил пример проекта на http://cl.ly/3B1P0r2P1i0m