NSTableView mittels NSSortDescriptor aber ohne NSMutableArray sortieren

Wie schon im letzen Post gesagt versuche ich mich gerade in einer kleinen Mac App. Ein Desktop-Programm bringt ganz andere UI-Konzepte mit als eine mobile App auf dem Smartphone. Beispielsweise können natürlich auf dem Desktop Tabellen mehrere Spalten haben – dies ist auf iOS und co. ja eher unüblich.

Irgendwie war es für mich ein bisschen irritierend eine Lösung zu finden wie ich den Inhalt einer NSTableView ohne die Benutzung eines NSMutableArrays aber mit NSSortDescriptor sortieren kann. Ich will so gut wie möglich den NS-Namespace in modernen Swift Anwendungen vermeiden. Sprich: Array statt NSArray, String statt NSString, etc.

Dank dem NSHipster habe ich eine fast schöne Lösung gefunden. Fast schön da diese etliche Forced-Casts enthält die man ja eigentlich immer versucht zu vermeiden. Falls also jemand eine bessere Idee hat, nur her damit!

Schlussendlich musste ich nur folgende paar dinge tun und schon sortiert sich mache NSTableView als hätte sie noch nie was anderes getan.

  1. Jeder sortierbaren Spalte einen SortDescriptor Key geben. Entweder über Quelltext oder (wie ich) über den Attributes Inspector in Xcode
    Attribute Inspector
  2. Im NSTableViewController die folgende NSTableViewDelegate-Methode hinzufügen:
    // MARK: - NSTableViewDelegate -
    extension ParserViewController: NSTableViewDelegate
    {
        func tableView(tableView: NSTableView, sortDescriptorsDidChange oldDescriptors: [NSSortDescriptor])
        {
            myList = (myList as NSArray).sortedArrayUsingDescriptors(tableView.sortDescriptors) as! Array
            tableView.reloadData()
        }
    }

Et viola, schon klappt es auch mit der Sortierung.

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s