Afficher les évênements d'un jour calendrier dans UITableView

Bonjour,


 


J'ai un calendar avec une UITableView dans lequel j'affiche pour l'instant tout les évênements présent dans le calendar mais je souhaiterais que lorsque je clique sur une date, j'affiche uniquement les évênements reliés à  cette date (pour une période de 24h donc...).


J'ai procédé comme suit mais ça ne fonctionne pas.



  dateSelected = [NSDate date];
    NSDate *startDate = dateSelected; //Date du jour par défaut
    NSDate *endDate = [startDate dateByAddingTimeInterval:24 * 60 * 60]; // 24h plus tard
   
    NSPredicate *predicate = [self.eventStore
                              predicateForEventsWithStartDate:startDate
                              endDate:endDate calendars:_events]; //"_events" --> NSArray contenant tout les évênements

    NSArray *events = [self.eventStore eventsMatchingPredicate:predicate];
 
    EKEvent *event = [events objectAtIndex:indexPath.row];
    
    cell.textLabel.text = event.title;
    cell.detailTextLabel.text = event.calendar.title;

Pouvez-vous me dire ce qui ne fonctionne pas ici?


 


Merci de votre aide


Mots clés:

Réponses

  • Le paramètre calendars de predicateEventsWithStartDate:endDate:calendars: doit être un tableau de calendriers (ou nil si l'on fait la recherche dans tous les calendriers ) pas d'événements.


  • AliGatorAliGator Membre, Modérateur
    Je ne comprend pas trop :

    1) Tu ne dis pas ce qui ne fonctionne pas, enfin plutôt ce que tu obtiens par ton code : ça plante, ça retourne des trucs mais pas ce que tu veux, ça retourne nil ou un tableau d'event vide, ... ? Si ça plante, à  quel endroit et à  cause de quoi (fait un step by step dans le code aussi)

    2) Tu dis vouloir les event pour un jour donné correspondant à  celui cliqué dans ta TableView. Mais quand je lis ton code ça construit ton predicate avec comme startDate le moment présent (la date et l'heure actuelle) et comme endDate, 24h après. Donc tu vas avoir tous les événements entre "maintenant" et "demain à  la même heure". C'est pourtant pas ce que tu décris vouloir récupérer.

    3) En plus ton NSPredicate ainsi écrit, et donc ton NSArray d'event, est donc recalculé à  chaque fois que la méthode est appelé pour une cellule, alors que le NSArray events devrait être le même pour toutes tes row de ta TableView et donc calculé qu'une seule fois, et ensuite pour chaque row tu te contentes de récupérer l'objetAtIndex:indexPath.row de ce tableau pré-calculé... plutôt que de le recalculer à  chaque fois tout ça pour ne récupérer qu'un seul de ses éléments à  chaque itération !

    4) Pire encore, puisque ton code dépend de la date courante [NSDate date], Si tu affiches ta TableView à  un instant T, puis scrolle son contenu 30s après, en haut puis en bas, tu ne vas plus avoir la même chose dans tes cellules puisque [NSDate date] sera à  ce moment une date 30s plus tard donc tu n'auras potentiellement pas les mêmes évènements !

    Bref, pas très au point tout ça, j'ai pas trop compris la logique de ton code dans tout ça ^^

    Je te conseille fortement de lire le Date and Time Programming Guide, parce que tu apprendras un paquet de trucs sur comment correctement manipuler des dates, avec plein d'astuces et de conseils (notamment NSDateCompoenents).
  • Ok j'vais lire correctement la doc et je reviens vers vous.


     


    Merci


Connectez-vous ou Inscrivez-vous pour répondre.