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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top