J'ai une petite application utilisant les données de base et NSPersistentDocument
. Pour les nouveaux documents, j'initialise le document avec un seul élément Settings
. Je pourrais déjà supprimer l'entrée d'annulation générée par l'initialisation, mais ...Problèmes d'annulation: Initialiser `NSPersistentDocument` par programmation sans indicateur" edited "dans la barre de titre
Le étrange comportement est la suivante: Le document commence par aucun drapeau "édité" dans le titre de la fenêtre. Dès que je clique dans le menu "Edition", le drapeau "édité" apparaît et il y a soudainement une action d'annulation possible.
Voici mon code 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 ...
}
Le problème est, dès cette entrée undo apparaît, l'utilisateur peut annuler la création de l'objet initial Settings
qui provoque de nombreux problèmes.
Est-ce un problème connu? Comment puis-je empêcher cela?
Voici une vidéo qui montre l'effet: https://youtu.be/O4lURxLAelE