NSArrayController aktuelle SortDescriptors speichern

Wer die Werte eines NSTableView mittels eines NSArrayControllers und Bindings füllt, braucht sich um die Implementierung der Funktionen zur Sortierung der Daten nach Tabellenspalten keine Gedanken zu machen. Gespeichert wird die aktuelle Sortierung jedoch nicht automatisch — nach einem Neustart der Applikation erscheinen die Werte wieder unsortiert.

Für den Benutzer ist es allerdings schöner, wenn nach einem Neustart die Daten in der Form sortiert sind, wie sie es beim Beenden des Programms waren.
Die Sortierung des Array innerhalb des NSArrayController geschieht über ein Array, welches eines oder mehrere Objekte der Klasse NSSortDescriptor enthält.
Der Startwert für die Sortierung der Werte im NSArrayController kann ebenfalls mittels Bindings gesetzt werden (unter dem Punkt sortDescriptors im Bindings-Inspektor des Controllers). Wir müssen also nur noch den entsprechenden Wert beim Beenden der Applikation (am besten in den NSUserDefaults) speichern und hier wieder einlesen.
Da man in den NSUserDefaults keine Objekte speichern kann, müssen die Informationen als NSData gespeichert werden.

- (void)applicationWillTerminate:(NSNotification *)notification
{
    NSData *data = [NSArchiver archivedDataWithRootObject:[arrayController sortDescriptors]];
    [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"tableSortDescriptors"];
}

arrayController ist in diesem Fall ein IBOutlet, welches im IB mit dem NSArrayController verbunden ist.

Im InterfaceBuilder geben wir nun folgende Werte für den Punkt »sortDescriptors« des ArrayControllers an:

Bind to: Shared User Defaults
Controller Key: values
Model Key Path: tableSortDescriptors

Unter Value Transformer: wählen wir nun noch aus dem DropDown-Menü NSUnarchiveFromData, damit die Werte wieder »unarchiviert« werden.

Nun sollte bei einem Neustart die letzte Sortierung (inklusive der Selektion der Tabellenspalte) wieder hergestellt werden.


Ähnliche Artikel

Dein Kommentar:

Sämtliche Html-Tags werden gelöscht, der Kommentar kann mit Textile formatiert werden.
Vor dem Absenden müsst ihr euch einmal die Vorschau ansehen.