У меня есть NSDocument в формате, не редактируемом напрямую, это описание чего-то в XML. У NSWindow есть связанный с ним контроллер представления настроек, который отлично манипулирует данными в документе, отмена работает, как ожидалось, сохраняет и т.д. c. Теперь также в NSWindow есть NSTextView, в который пользователь может вводить какой-то текст, но он не является частью содержимого документа, он используется только как временный текст. Конечно, я хочу поддержать отмену и для этого текста, поэтому у меня в Interface Builder для этого NSTextView включена галочка «Отменить», и отмена работает нормально.
Теперь начинается проблема: NSDocument помечается как грязный при изменении NSTextView. Поскольку это временный текст, я не хочу, чтобы пользователя приставали к сохранению изменений в документе, которые на самом деле не являются частью документа.
Как мне отсоединить NSTextView от цепочки ответчиков, ведущей вверх к экземпляру диспетчера отмены NSDocument? Простое предоставление нового экземпляра NSUndoManager не решает эту проблему, потому что он просто поднимается по цепочке респондентов до NSDocument.
extension InputViewController: NSTextViewDelegate {
func undoManager(for view: NSTextView) -> UndoManager? {
return myUndoManager
}
}