EKEvent Получить текущее событие iOS7

Поэтому мне нужно получить текущее событие в календаре. I.E - событие, которое началось и еще не закончилось. Я написал код, но он не работает. Во время отладки я заметил, что моя переменная oneDayAgo равна нулю, и я не понимаю, почему. Переменная oneWeekFromNow хороша.

Вот метод, который я написал:

-(void)getCurrentEvent{
// Get appropriate calendar
[self.store requestAccessToEntityType:EKEntityTypeEvent
                      completion:^(BOOL granted, NSError *error) {
                          NSCalendar *calendar = [NSCalendar currentCalendar];
                          NSDateComponents *oneDayAgoComponents = [[NSDateComponents alloc] init];
                          oneDayAgoComponents.day -=1;
                          NSDate *oneDayAgo = [calendar dateByAddingComponents:oneDayAgoComponents
                                                                        toDate:[NSDate date]
                                                                       options:0];
                          NSDateComponents *oneWeekFromNowComponents = [[NSDateComponents alloc] init];
                          oneWeekFromNowComponents.week = 1;
                          NSDate *oneWeekFromNow = [calendar dateByAddingComponents:oneWeekFromNowComponents
                                                                             toDate:[NSDate date]
                                                                            options:0];
                          NSPredicate *predicate = [self.store predicateForEventsWithStartDate:oneDayAgo
                                                                                       endDate:oneWeekFromNow
                                                                                     calendars:nil];

                          NSMutableArray *currentEvens = [[NSMutableArray alloc]init];
                          // Fetch all events that match the predicate
                          [self.store enumerateEventsMatchingPredicate:predicate usingBlock:^(EKEvent *event, BOOL *stop) {
                              if (([event.startDate compare:[NSDate date]] == NSOrderedDescending) &&
                                  ([[NSDate date] compare:event.endDate] == NSOrderedDescending)) {
                                  [currentEvens addObject:event];
                              }

                          }];


                          self.lblEvent.text = [NSString stringWithFormat:@"%@", currentEvens];
                          [self.view reloadInputViews];

                      }];

}


person Michal Shatz    schedule 16.01.2014    source источник


Ответы (2)


Попробуйте это вместо этого:

NSDateComponents *oneDayAgoComponents = [[NSDateComponents alloc] init];
oneDayAgoComponents.day = -1;
person Unheilig    schedule 16.01.2014
comment
Спасибо! Не заметил этой опечатки. Какая глупая ошибка... Хорошо выглядишь :* - person Michal Shatz; 17.01.2014
comment
@MichalShatz Удовольствие :-) Это был своевременный вопрос - сразу после того, как я выпил чашку эспрессо. - person Unheilig; 17.01.2014

Вот исправленный код, который работал у меня. Мне также нужно было изменить некоторые другие вещи:

-(void)getCurrentEvent{
// Get appropriate calendar
[self.store requestAccessToEntityType:EKEntityTypeEvent
                      completion:^(BOOL granted, NSError *error) {
                          NSCalendar *calendar = [NSCalendar currentCalendar];
                          NSDateComponents *oneDayAgoComponents = [[NSDateComponents alloc] init];
                          oneDayAgoComponents.day = -1;
                          NSDate *oneDayAgo = [calendar dateByAddingComponents:oneDayAgoComponents
                                                                        toDate:[NSDate date]
                                                                       options:0];
                          NSDateComponents *oneWeekFromNowComponents = [[NSDateComponents alloc] init];
                          oneWeekFromNowComponents.week = 1;
                          NSDate *oneWeekFromNow = [calendar dateByAddingComponents:oneWeekFromNowComponents
                                                                             toDate:[NSDate date]
                                                                            options:0];
                          NSPredicate *predicate = [self.store predicateForEventsWithStartDate:oneDayAgo
                                                                                       endDate:oneWeekFromNow
                                                                                     calendars:nil];

                          NSMutableArray *currentEvens = [[NSMutableArray alloc]init];
                          // Fetch all events that match the predicate
                          [self.store enumerateEventsMatchingPredicate:predicate usingBlock:^(EKEvent *event, BOOL *stop) {
                              if (([event.startDate compare:[NSDate date]] == NSOrderedAscending) &&
                                  ([[NSDate date] compare:event.endDate] == NSOrderedAscending)) {
                                  [currentEvens addObject:event];
                              }

                          }];

                          NSString *currentEventsString = [[NSString alloc]init];
                          for (EKEvent *event in currentEvens) {
                              currentEventsString = [currentEventsString stringByAppendingString:event.title];
                          }

                          dispatch_async(dispatch_get_main_queue(), ^{
                              self.lblEvent.text = currentEventsString;
                          });

                      }];

}

person Michal Shatz    schedule 17.01.2014