4

Existe-t-il un moyen de définir dynamiquement le ou les descripteurs de tri pour un contrôleur de résultats récupéré sur iOS? Par exemple, j'ai besoin que les résultats de données de base me soient renvoyés triés en fonction du réglage d'un contrôle segmenté dans la barre de titre de navigation. L'utilisateur peut soit cliquer sur le contrôle segmenté pour trier par Prix ou Priorité. J'ai ensuite besoin que le contrôleur de résultats récupéré retourne et affiche les informations de données de base triées en sections en fonction de cette valeur de contrôle segmentée.Modifier dynamiquement le descripteur de tri pour les résultats obtenus Contrôleur

Je sais comment définir les descripteurs de tri initialement, mais je ne sais pas comment le changer/le mettre à jour dynamiquement. Puisque la fonction - (NSFetchedResultsController *)fetchedResultsController est paresseuse, ne retournera-t-elle pas toujours la frc qui a été créée la première fois (retournant ainsi le paramètre de descripteur de tri initial)? Est-ce que je ferais quelque chose comme stocker la valeur de contrôle segmentée dans les sharedPreferences, et puis quand il est changé, mettre mon fetchedResultsController à zéro pour qu'un nouveau sera généré? Puis, dans la fonction fetchedResultsController, je peux créer mon sortDescriptor en fonction de ce paramètre sharedPreferences?

Répondre

3

Vous êtes en contrôle de cela. Vous pouvez, par exemple, libérer le contrôleur lorsque le contrôle segmenté est mis à jour et recharger l'appel sur votre table. Cela entraînerait la reconstruction du contrôleur avec le nouveau tri.

Il existe d'autres solutions, mais elles dépendent de la conception de votre application.

+0

ah Marcus, votre tutoriel de flux dans PragProg est l'un des premiers articles que j'ai lus sur NSFetchedController, alors merci pour la réponse et cet article. Donc, c'est assez facile de relâcher simplement mon contrôleur récupéré et de le mettre à zéro, et permettre au ViewController de le régénérer en fonction du contrôle segmenté. Cela semble assez facile. Merci. – cpjolicoeur

+0

est-il juste d'appeler '[self.tableView reloadData]' lors de l'utilisation d'un contrôleur de résultats récupérés, ou existe-t-il une autre méthode requise pour recharger des données via une FRC? – cpjolicoeur

+1

Une fois que vous avez appelé '-performFetch:' sur le 'NSFetchedResultsController', vous pouvez appeler' -reloadData' sur la table. Rien d'autre n'est requis. –