Sortieren von NstableColumn -Inhalten
-
25-09-2019 - |
Frage
Ich habe ein Problem mit der Sortierung von NstableColumn -Inhalten. In meinem nstableView gibt es drei Spalten: Datei, Größe, Pfad. Der Inhalt wird in NSMutablearray gespeichert. Jedes Objekt in diesem Array ist ein NSDictionary, das drei Schlüssel enthält: Datei, Größe und Pfad - für jedes ist ein nsstring.
Im Schnittstellenbuilder kann ich in den Attributen jeder Tabellespalte Sortieroptionen auswählen: Selector: IB eingegeben "Compare:", was ich für in Ordnung halte, weil ich NSStrings vergleiche. Sortieren Sie den Schlüssel - und das ist das Problem, das ich denke - ich weiß nicht, was ich hier eingeben soll.
Irgendwelche Hinweise? Wenn Sie Fragen zu meinem Code haben, fragen Sie bitte.
Lösung
Also fand ich die komplette Lösung.
Gehen Sie zunächst zum Schnittstellenbuilder. Wählen Sie Spalte aus, die Sie sortieren möchten. Gehen Sie zum Inspektor der Spalte und wählen Sie die erste Schaltfläche, um die "Tabellenspaltenattribute" anzuzeigen. Stellen Sie geeignete Werte fest (buchstäblich nein "oder 'oder @ werden benötigt):
Sort key: file
wobei 'Datei' der Schlüssel des Wörterbuchs ist, dass der Inhalt in Ihrer Spalte angezeigt wird.
Selector: compare:
Standard -Sortierfunktion.
Speichern Sie nun alle Änderungen hier und springen Sie zu Xcode, in der Klasse, in der das Modell die Quelle der in NstableView gezeigten Daten ist. Sie sollten bereits wissen, dass Sie dort zwei Methoden benötigen:
-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn
*)tableColumn row:(NSInteger)row
Diese beiden werden benötigt, um das nstabledatasource informelle Protokoll anzupassen. Sie können im MacDev Center darüber lesen.
Jetzt müssen Sie nur noch eine neue Methode hinzufügen:
-(void)tableView:(NSTableView *)tableView sortDescriptorsDidChange: (NSArray *)oldDescriptors
Es kann einen sehr einfachen Code enthalten, der das Ding erledigt:
-(void)tableView:(NSTableView *)tableView sortDescriptorsDidChange: (NSArray *)oldDescriptors
{
NSArray *newDescriptors = [tableView sortDescriptors];
[results sortUsingDescriptors:newDescriptors];
//"results" is my NSMutableArray which is set to be the data source for the NSTableView object.
[tableView reloadData];
}
Und das ist alles. Es funktioniert in meiner App, hoffe, es wird in Ihrem Fall funktionieren: D sollte alles automatisch funktionieren. Ich habe gerade alle Dateien gespeichert und die App erstellt. Und es hat funktioniert. :)
Seite, die mir geholfen hat:Cocoadev: SortingNstableView
Andere Tipps
Schlüssel ist der key
dass Sie im Wörterbuch verwenden, um den Wert abzurufen.
In Ihrem Fall haben Sie drei Schlüssel: Datei, Größe und Pfad. Wählen Sie die aus, auf der Sie sortieren möchten. Der Schlüssel wird verwendet, um den Wert von jedem Datensatz für die Sortierung abzurufen.
Wenn Ihre Schlüssel @"Datei", @"Größe", @"Path" sind und Sie sortieren möchten file
Dann versuche zu setzen value.file
in die Sort Key
Feld in IB.
Verwenden Sie Schlüssel, die Sie beim Einfügen verwenden values
in dein NSDictionary
.