2016-03-25 20 views
-1

Ich habe einen NSTabViewController mit einem NSTextView in einem Tab. Der Text wird in den Stammdaten gespeichert. Ich speichere den Text, wenn die Ansicht verschwindet.NSTextView von Kerndaten unterstützt

override func viewWillDisappear() 
{ 
    super.viewWillDisappear() 
    self.saveText() 
} 

Aber wie kann ich den Text speichern, wenn das Dokument selbst schließt? Im Moment spare ich bei jedem Tastendruck, aber das ist wohl zu übertrieben. Gibt es einen besseren Weg?

func textDidChange(notification: NSNotification) 
{ 
    self.saveText() //save text after every keystroke => excessive but works 
} 

edit:

func saveText() 
{ 
    guard let assumedObject = self.representedObject as? NSManagedObject else { return } 
    assumedObject.notes = self.textView.string 
} 
+0

Wird 'viewWillDisappear' nicht aufgerufen, wenn das Fenster geschlossen wird? – Willeke

+0

Was ist, wenn der Benutzer das Dokument speichern, aber nicht schließen möchte? Dann sind weder das Dokument noch die Ansicht geschlossen, aber die Inhalte in den Kerndaten sind nicht aktuell. – user965972

+0

Wie speichern Sie die anderen Eigenschaften? – Willeke

Antwort

-1

Wenn saveData() Werke, während saveText() nicht der Fall, sollten Sie vielleicht saveData() stattdessen nennen.

Der richtige Ort, um ein Textfeld zu speichern, ist in textFieldDidEndEditing:, ein Textfeld Delegate-Methode.

+0

saveData ist meine benutzerdefinierte Speicherfunktion. Ich habe es hier umbenannt, um saveText zu speichern, damit es klarer wird, was es macht. Aber es sieht so aus, als hätte ich vergessen, es überall zu tun. Das Problem speichert den Text nicht. Das Problem besteht darin, unnötige Arbeit zu vermeiden. Wenn der Benutzer einen ganzen Absatz eingibt, ist das Speichern nach jedem Tastendruck übermäßig oder nicht? – user965972

+0

Ich habe zusätzliche Informationen hinzugefügt, um anzuzeigen, wo der Inhalt des Textfelds am besten gespeichert werden kann. – Mundi

0

NSPersistentDocument kümmert sich um alle speichern Operationen, Rückgängig usw. Dies ist der Zweck dieser Klasse. Es besteht keine Notwendigkeit, etwas an Core Data zu senden. Binden Sie einfach Ihren NSTextView Wert an die Core Data-Eigenschaft, das war's.

Besser entfernen Sie alle Anrufe an Ihre saveText() Funktion.