1

Disons que j'ai une entité Person dans un magasin de données Core. J'ai un UITableView rempli par un NSFetchedResultsController qui montre toutes les entités Person. Naturellement, l'entité Person a une propriété name, qui est facultative. Nous voulons afficher la liste alphabétiquement, A-Z. Les utilisateurs qui voient cela veulent d'abord regarder les personnes nommées, car ce sont elles qui en tiennent le plus à cœur. Ainsi, le descripteur de tri que le contrôleur prend dans son initialiseur doit afficher Person entités avec des noms non-nuls en premier, puis des noms nuls.Tri d'un contrôleur de résultats récupéré, les chaînes vides sont remplies

Mes options sont limitées. Je suis seulement autorisé à utiliser certains comparateurs qui sont fournis sur NSString lors de la frappe de la base de données, qui ne répondent pas à mes critères. Je ne peux pas trier les valeurs transitoires. J'ai essayé d'utiliser un espace blanc de largeur nulle comme valeur par défaut, mais les données de base suppriment apparemment les espaces. Pensées?

Répondre

1

Les sections du fetchedResultsController ne doivent pas nécessairement correspondre un à un avec les sections que vous témoignez au votre tableview. En ce moment vous avez des sections quelque chose comme (null), A, B, C, D, etc etc. Mais vous pouvez changer la façon dont votre contrôleur de vue choisit d'afficher les sections. Définir la section 0 dans votre tableview regarde la section 1 dans le fetchedResultsController et 1-> 2, 2-> 3 ... jusqu'à ce que la dernière section (la section no names) pointe vers la section 0.

Ce n'est pas si compliqué mais il peut ajouter un désordre à votre code. Je vous recommande donc de créer un objet séparé qui traite de la conversion des indexPaths et des sections fetchedResultsController en indexPaths et sections de votre tableview. (Assurez-vous également de traiter le cas où il n'y a pas de section "sans nom", et quand il n'y a qu'une section "sans nom").

Si cela semble trop compliqué, une solution plus simple serait d'ajouter une propriété de hasName et de trier par celle-là. Définissez un paramètre personnalisé pour le nom de la personne qui définira également la propriété hasName afin que vous puissiez facilement synchroniser cette propriété.

+0

Je n'affiche les noms que dans une section, mais la suggestion 'hasName' semble fonctionner. –