Question

J'ai un problème avec le tri contenu NSTableColumn. Dans mon NSTableView il y a trois colonnes: fichier, la taille, le chemin. Les contenus sont stockés dans NSMutableArray. Chaque objet de ce tableau est un NSDictionary contenant trois clés: fichier, la taille et le chemin - la valeur pour chacun un NSString.

Dans Interface Builder, dans les attributs de chaque colonne de table je peux choisir les options de tri: Sélecteur: IB est entrée "COMPARE:" que je pense est ok, parce que je compare NSStrings. Sort Key - et c'est le problème que je pense - je ne sais pas quoi entrer ici.

Les indices? Si vous avez des questions au sujet de mon code, s'il vous plaît demander.

Était-ce utile?

La solution

Alors j'ai trouvé la solution complète.

Tout d'abord, allez à Interface Builder. Sélectionnez la colonne que vous voulez trier. Aller à l'inspecteur de la colonne et choisissez le premier bouton pour voir les attributs « Tableau de colonne ». Définissez des valeurs appropriées (littéralement, non »ou« ou @ sont nécessaires):

Sort key: file

où « fichier » est la clé du dictionnaire que le contenu est affiché dans votre colonne.

Selector: compare:

fonction de tri standard.

Maintenant, enregistrez tous les changements ici et passer à Xcode, à la classe qui est le modèle, la source des données présentées dans NSTableView. Vous devez déjà savoir que vous avez besoin de deux méthodes là-bas:

-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn
 *)tableColumn row:(NSInteger)row

ces deux sont nécessaires pour se conformer au protocole informel NSTableDataSource. Vous pouvez lire à ce sujet au Centre MacDev.

Maintenant, tout ce que vous avez à faire est d'ajouter une nouvelle méthode:

-(void)tableView:(NSTableView *)tableView sortDescriptorsDidChange: (NSArray *)oldDescriptors

il peut contenir un code très simple qui va faire la chose:

-(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]; 
}

Et voilà tout. Il travaille dans mon application, espérons que cela fonctionnera dans votre cas: D Tout doit fonctionner automatiquement. Je viens enregistré tous les fichiers et construit l'application. Et cela a fonctionné. :)

Site qui m'a aidé: CocoaDev: SortingNSTableView

Autres conseils

est la key que vous utilisez dans le dictionnaire pour récupérer la valeur.

Dans votre cas, vous avez trois clés: fichier, la taille et le chemin. Sélectionnez celui sur lequel vous voulez trier. La clé est utilisée pour récupérer la valeur de chaque enregistrement à utiliser pour le tri.

Si vos clés sont @ « fichier », @ « taille », @ « chemin » et que vous voulez trier file ensuite essayer de mettre value.file dans le champ Sort Key dans IB.

Utilisez les touches que vous utilisez lors de l'insertion values dans votre NSDictionary.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top