2009-09-26 14 views
0

Je ne suis pas sûr que je suis phrasé ce bien, mais au fond, je le faire dans mon principal délégué de l'application:problème se index de la ligne sélectionnée dans NSTableView avec prédicat de filtre

application * app = [[alloc Application] initWithApplication : fullPath]

la classe d'application a une méthode initWithApplication qui prend dans la voie d'une application et définit ensuite les propriétés pour appPath, nom, etc. puis ajouter le nouvel objet « app » pour les applications NSMutableArray:

if (app) [applications addObject: app]; 

Le NSArrayCont Le tableau de contenu du rouleau est lié aux applications NSMutableArray, puis les différentes clés (appPath, name, etc.) sont définies dans NSArrayController. J'ai alors une vue de table avec différentes colonnes liées aux différentes propriétés, par ex. une colonne pour le nom, une colonne du chemin, etc.

J'ai alors un bouton de lancement qui lance l'application qui est sélectionnée dans la vue de table. Pour cela, j'utilise ce code:

Application *app = [applications objectAtIndex:[tableView selectedRow]]; 

Puis-je utiliser juste « app.appPath » comme une référence au chemin de l'élément sélectionné. Cela fonctionne bien. Le problème survient lorsque le contenu de la vue tabulaire est filtré à l'aide d'un filtrePredicate. Fondamentalement, il filtre toutes les applications dans la vue tableau et ne laisse que celles avec un nom qui contient la phrase tapée dans la boîte de recherche.

La méthode ci-dessus ne fonctionne pas car elle récupère l'index de l'élément dans la vue tabulaire et, comme tous les éléments ne figurent pas dans la vue tabulaire, le nombre est altéré. Par exemple, disons que j'ai une application appelée MyApp.app qui est un élément à l'index 25 du tableau des applications.

Le code ci-dessus fonctionne bien car tableView et le tableau d'applications ont le même nombre d'objets. Cependant, le filtrage du contenu de la vue de table crée une différence dans le nombre d'objets et lance donc la mauvaise application.

J'espère que mon explication n'est pas trop confuse, mais c'est difficile à expliquer. De toute façon autour de cela?

Merci

Répondre

1

solution était assez simple pour quelqu'un qui veut savoir:

[[arrayController sélection] valueForKey: @ "appPath"]

HTH