2017-06-20 1 views
0

Ich möchte einen AddObserver zu meinem NSArraycontroller machen. Die Idee ist, dass, wenn ein Datensatz von Core Data (binden an den NSArrayController) Änderungen der Datensatz wird in der sqlite-Datenbank gespeichert wird. Der NSArraycontroller ist an eine NSTableView gebunden.Hinzufügen eines Observer zu einem NSArrayController

Antwort

0

Wenn Sie sich für die Benachrichtigung NSManagedObjectContextObjectsDidChange auf dem verwalteten Objektkontext Ihres Array-Controllers registrieren, erhalten Sie Benachrichtigungen, wenn sich diese Objekte ändern. Wenn Sie einen dedizierten untergeordneten MOC für Ihre Ansicht verwenden, erfasst dieser MOC alle Änderungen, und Sie können Ihren MOC anschließend in seinen übergeordneten Bereich speichern.

Wenn Sie Benachrichtigungen basierend auf Benutzeränderungen benötigen, verwenden Sie die Tabellenansicht und nicht den Array-Controller. Wenn Sie weiterhin eine zellenbasierte Tabellenansicht verwenden, sollten Sie eine der (veralteten) Methoden wie -textDidEndEditing: überschreiben.

Sehen Sie sich für View-basierte Tabellenansichten die verschiedenen Delegaten für NSControl an, z. B. -control: textShouldEndEditing: on NSControlTextEditingDelegate. Implementieren Sie sie auf Ihrem TableView-Delegaten, und natürlich machen Sie den TableView-Delegaten auch den Delegierten jedes Steuerelements in Ihrer Tabelle (das könnte schon passieren? Überprüfen Sie zuerst).

How can I get notified when the user finishes editing a cell in an NSTableView? hat eine gute Diskussion.

+0

Sie erhalten Benachrichtigungen, wenn sich Objekte ändern. – Willeke

+0

Ich habe versucht, das Tutorial die folgende Seite hinzuzufügen, tut aber nicht was ich will. https://cocoacasts.com/how-to-observe-a-managed-object-context/ Die Benachrichtigung erfolgt nur, wenn der Befehl zum Speichern ausgeführt wird. Was ist falsch? Ich brauche einen addObserver, der stattfindet, wenn ein Textfeld in der NSTableView bearbeitet wird. –

+0

Vielen Dank Hal Mueller. Bij geht für: // MARK: - Textfield. überschreiben func controlTextDidEndEditing (_ obj: Benachrichtigung) { drucken ("Notification: \ (obj)") } –

1

Vielen Dank Hal Mueller.

sich für gehen:

// MARK: - Textfield. 
    override func controlTextDidEndEditing(_ obj: Notification) { 
     print("Notificatie: \(obj)") 
    } 

Jetzt kann ich weiter gehen.

Verwandte Themen