CoreData: Filtrer un tableau sans SearchField
cestlogique
Membre
Hello!
La manière de spécifier un prédicat de recherche pour un SearchField est limpide. On peut facilement afficher uniquement les employés dont le manager est X en tapant tout ou partie de son nom grâce au prédicat suivant (basé sur le tutorial d'Apple
Mais comment faire pour afficher tous les employés dirigés par X en sélectionnant son nom dans un pop-up menu??
Comment doit-on configurer le binding "value" de la tableView?
Doit-on, et si oui comment, configurer le binding " filterPredicate" de l'ArrayController (ce binding est très mal documenté, d'ailleurs)?
Si quelqu'un a des infos?
Merci! :why?:
La manière de spécifier un prédicat de recherche pour un SearchField est limpide. On peut facilement afficher uniquement les employés dont le manager est X en tapant tout ou partie de son nom grâce au prédicat suivant (basé sur le tutorial d'Apple
manager.fullNameAndID contains $value
Mais comment faire pour afficher tous les employés dirigés par X en sélectionnant son nom dans un pop-up menu??
Comment doit-on configurer le binding "value" de la tableView?
Doit-on, et si oui comment, configurer le binding " filterPredicate" de l'ArrayController (ce binding est très mal documenté, d'ailleurs)?
Si quelqu'un a des infos?
Merci! :why?:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Le pop-up menu envoie une action à un controller qui se charge de fetcher (un nouveau terme à transposer...) l'ArrayController:
Ce qui n'empêche pas que si vous avez une solution un peu plus bindante, vous êtes les bienvenus.
Désolé pour la réponse tardive mais j'ai à peine eu le temps de tâter un peu du core data hier.
Oui , il y a une solution plus élégante faisant intervenir les bindings mais nécessitant un peu de code tout de même.
En dehors des searchFields dont c'est le rôle (qu'ils assument admirablement) il ne me semble pas qu'il y ait de classe qui expose la clef "search/prédicate" aux bindings
Alors plutot que de tenter de binder un hypothétique "search/prédicate" du popUp à ton arrayController, il faut inverser l'approche et binder la clef "filterPredicate" du arrayController à la sélection de ton popUp.
Pour reprendre le tuto d'Apple dont tu sembles parler avec les Departments et Employees ...:
-A- SOUS IB
-1 Crées un 3 ème ArrayController (bindé comme les 2 autres pour le "contentSet" et le "managedObjetContext")
-2 Crées ton pupUp et bindes le comme suis:
      . Content sur ton ArrayCtrl/ArrangedObjects
      . ContentValues sur ton ArrayCtrl/ArrangedObjects/fullNameAndID
      . SelectedIndex sur ton ArrayCtrl/SelectionIndex
-3 Bindes le ArrayController qui gère la tableView par son "Controller content parameter / filterPrédicate" à ton controllerDePopUp/selectedObjects". Et c'est là qu'est l'astuce utilises le champ "value Transformer" du binding en y écrivant par exemple "predicateBossLastName".
-B- SOUS Xcode: Crées ton transformer
-1 crées une classe dérivée de NSObject en laissant le header vide:
Et dans le fichier d'implémentation à la sauvage et pour le test tu peux mettre:
Enfin n'oublies pas de déclarer ton transformer pour que IB fasse la jonction avec le nom déclaré dans le binding.
Dans le .m de myDocument, crée la méthode +initialise (si c'est pas déjà fait) et écris simplement:
Et voilà ça roule ma poule
la TableVue affiche maintenant la liste des Employees ayant un Manager qui a le même prénom que celui sélectionné dans le popUp le tout bien gentilment mis à jour par nos chers bindingsÂ
Evidemment il faut ajouter à ce squelette la possibilité que le popUp ne sélectionne aucun Employee et gérer ce cas pour que la tableView affiche alors tous les employees.
Et tant qu'à faire le mieux est de créer un Transformer "passe partout" qui soit capable de créer un prédicate en fonction de la clef sélectionnée dans un autre PopUp par exemple.
Mais bon l'idée est là , les détails ne sont bien compliqués à gérer maintenant
@+
Chapeau pour cette solution qui représente un bon modèle pour utiliser le binding "filter predicate".
À propos, as-tu vu mon nouveau message là ?
Cestlogique.