2010-08-11 4 views
4

Je développe pour iPhone iOS 4.0 et j'ai une liste d'objets d'anniversaire (date + nom) stockés en utilisant des données de base. Je veux utiliser le NSFetchedResultsController pour récupérer cette liste triée par la prochaine date de naissance de chaque objet d'anniversaire. Pour cela, j'ai besoin de définir ma propre logique pour le descripteur de tri.Tri personnalisé à l'aide de catégories et de données de base - est-il pris en charge par le framework?

J'ai essayé d'utiliser:

[NSSortDescriptor sortDescriptorWithKey:@"birthdayDate" 
           ascending:YES 
           selector:@selector(compareNextBirthday:)]; 

compareNextBirthday: est défini dans une catégorie que j'ai créé sur une classe NSDate.

Mais lorsque je tente de récupérer les données que je reçois l'erreur suivante: « sélecteur de NSSortDescriptor non pris en charge: compareNextBirthday: »

je passais des heures à essayer de comprendre ce sans chance ... ne supporte Core Data ce genre de tri personnalisé du tout? Ai-je vraiment besoin de faire un tri en mémoire?

Répondre

7

Le tri à l'intérieur du NSFetchedResultsController est effectué au niveau du magasin persistant. Si vous utilisez SQLite en tant que backend, il échouera.

Pour quelque chose comme ceci, je dé-normaliserais les données et stockerais le mois et le jour du mois en plus de la date de naissance réelle afin que vous puissiez les trier.

+0

Étant donné les champs du mois et du jour du mois, comment un NSSortDescriptor peut-il afficher un ordre commençant par aujourd'hui et se terminant par hier? Je ne vois pas une solution évidente. –

+1

Il n'y a aucun moyen de trier au niveau du magasin persistant comme ça. Vous auriez besoin de les ramener en mémoire à ce type de logique. Vous pouvez filtrer en normalisant les données. –

+0

Mais c'est exactement la question, n'est-ce pas? Je ne vois pas comment la dénormalisation aide l'affiche ici. –

Questions connexes