NSFetchedResultsController sections présent/passé/futur trié avec date

Bonjour,


 


je travaille sur un projet utilisant les NSFetchedResultsController dans lequel je dois afficher une liste d'événements.


 


J'aimerais trier ces événements en fonction de passé / présent / futur et pour cela utiliser les sections (du NSFetchedResultsController et affichage dans UITableViewController)


 


Un événement est représenté par un NSManagedObject qui contient (entre autres) les propriétés date_debut et date_fin (des NSString)


 


 


à‰tant encore novice avec Core Data, je ne vois pas comment résoudre ce cas.


Quelqu'un aurait une idée ?


Réponses

  • CéroceCéroce Membre, Modérateur

    Les dates ne doivent pas être des strings, mais des dates, ce qui permet de les comparer.


  • Hello,


     


    1. Pour quoi tu stock les date_debut et date_fin en NSString et non pas en NSDate ?. 


     


    2. Pour récupérer les évènement  ( présent, futur, passé) il suffit de construire ton NSfetchRequest avec les prédicat et/ou sort descriptor.

  • Même en changeant le type en NSDate, je n'ai pas la logique pour les sections.


     


    Merci.


  • Quelle logique que tu n'a pas ? tu veux afficher quoi exactement ? 


     


    A mon avis le problème est dans ton Modèle de donné.




  • Les dates ne doivent pas être des strings, mais des dates, ce qui permet de les comparer.




    Même en changeant le type des objets en NSDate, je n'ai pas la logique pour les sections.


    Merci.


     


     




    Hello,


     


    1. Pour quoi tu stock les date_debut et date_fin en NSString et non pas en NSDate ?. 


     


    2. Pour récupérer les évènement  ( présent, futur, passé) il suffit de construire ton NSfetchRequest avec les prédicat et/ou sort descriptor.




     


    Précision de la question: je ne trouve pas comment remanier mon model ainsi que construire et paramétrer le NSFetchedResultsController (bien entendu avec des prédicats et tout le toutim...) 

  • Le résultat recherché:


     


    mes événements dans un UITableView avec une section "à‰vénements passés", une section "à‰vénements présents" et une section "à‰vénements futurs"


  • BooleanneBooleanne Membre
    novembre 2013 modifié #8

    Je crois que c'est plus une question de logique que de CoreData.


    Je suppose que tes événements se classent comme ceci :


    les événements présents sont ceux pour lesquels la date du jour est comprise entre ta date de début et ta date de fin.


    les événements passés sont ceux pour lesquels la date de fin est passée


    les événements futurs sont ceux pour lesquels la date de début n'est pas encore arrivée


     


    Je pense que tu peux faire un fetch qui extrait tous les événements, à  toi de dire ensuite à  quelle section tu l'attribues.


    Sinon, peut-être que tu peux ajouter un attribut qui se met à  jour dans ton entity : passé, présent, futur. Du coup tu pourras faire un fetch sur cet attribut. 


    Je suis novice sur CoreData, moi aussi, alors, je ne sais pas ce que valent mes réponses.... j'attends les coups de règle ;)


  • Déjà , comme mentionné par les précédentes interventions : utiliser des NSDate au lieu de NSString !


     


    Pour tes sections, tu peux utiliser un attribut transient (qui n'est donc pas stocké) dont la valeur est calculée dynamiquement en fonction de chaque date au moment de ta requête (nécessite donc une sous-classe de NSManagedObject) : cet attribut peut-être une value numérique (0 pour évènements passés, 1 pour évènements présents et 2 pour évènement futurs).


     


    Tu mets alors cet attribut dans la partie sectionNameKeyPath: lors de la construction de ton NSFetchedResultsController.


     


    C'est ensuite ton controller qui traduira la valeur récupérée de chaque section par un affichage appropriée.


     


    Je pense que ça devrait fonctionner. Par contre pour les performances, suis pas sûr du résultat (comparaison de date).


  • AliGatorAliGator Membre, Modérateur
    Il suffit d'ajuster ta NSFetchRequest pour lui mettre une condition du type "date_fin<now" pour les évènements passés, "date_debut>now" pour évènement futurs et "date_debut<now<date_fin" pour les évènements en cours.

    L'utilisation d'un attribut transcient intermédiaire comme proposé par Kubernan pour calculer ces 3 cas permet de simplifier les choses et rendre la requête plus libile
Connectez-vous ou Inscrivez-vous pour répondre.