У меня есть небольшое приложение, использующее данные ядра и NSPersistentDocument
. Для новых документов я инициализирую документ одним элементом Settings
. Я уже мог подавить запись отмены, сгенерированную инициализацией, но ...Undo troubles: Инициализировать `NSPersistentDocument` программно без« отредактированного »флага в строке заголовка
странное поведение: Документ начинается без «отредактированного» флага в заголовке окна. Как только я нажимаю в меню «Редактировать», появляется «отредактированный» флаг, и внезапно может быть отменено действие.
Вот мой init()
код:
class Document: NSPersistentDocument {
var settings: Settings! = nil
override init() {
super.init()
do {
let fetchSettings = NSFetchRequest(entityName: "Settings")
let settingsList = try self.managedObjectContext!.executeFetchRequest(fetchSettings)
precondition(settingsList.count < 2, "Too many settings object in the core data store.")
if settingsList.count == 1 {
settings = settingsList[0] as? Settings
precondition(settings != nil)
} else {
managedObjectContext!.undoManager!.disableUndoRegistration()
settings = NSEntityDescription.insertNewObjectForEntityForName("Settings", inManagedObjectContext: self.managedObjectContext!) as? Settings
precondition(settings != nil)
// Here setup the "settings" object...
settings.xxx = //...
settings.yyy = //...
managedObjectContext!.undoManager!.enableUndoRegistration()
}
} catch {
preconditionFailure("Could not retrieve/create settings object because of an unknown core data error.")
}
}
// ... more methods ...
}
Проблема заключается в том, как только появляется эта запись отмены, пользователь может отменить создание первоначального Settings
объекта, который вызывает много проблем.
Это известная проблема? Как я могу предотвратить это?
Вот видео, которое демонстрирует эффект: https://youtu.be/O4lURxLAelE