Ich habe eine kleine App mit Kerndaten und NSPersistentDocument
. Bei neuen Dokumenten initialisiere ich das Dokument mit einem einzelnen Settings
Element. Ich konnte den durch die Initialisierung erzeugten Rückgängig-Eintrag bereits unterdrücken, aber ...Probleme rückgängig machen: "NSPersistentDocument" programmatisch initialisieren ohne "editiert" -Flag in der Titelleiste
Das seltsame Verhalten ist dies: Das Dokument beginnt mit keinem "bearbeiteter" Flag im Fenstertitel. Sobald ich klicke, klicke ich in das "Bearbeiten" Menü, das "editierte" Flag erscheint und es ist plötzlich eine Rückgängig Aktion möglich.
Hier mein init()
Code:
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 ...
}
Das Problem ist, sobald dieser Undo-Eintrag angezeigt wird, kann der Benutzer die Erstellung des ersten Settings
Objekts rückgängig zu machen, die viele Probleme verursacht.
Ist dies ein bekanntes Problem? Wie kann ich verhindern, dass dies passiert?
Hier ist ein Video, das die Wirkung zeigt: https://youtu.be/O4lURxLAelE