2014-09-26 3 views
2

Я нахожусь в Xcode 6.0.1, создавая тестовое приложение с комплектом событий. Следующий код успешно заполняет заголовок каждого события, но его заметки возвращаются как (null), даже если свойство hasNotes возвращает YES. И я вижу заметки для одного и того же события в приложении календаря iPhone по умолчанию.EKEvent.notes возвращает (null), даже если EKEvent.hasNotes возвращает ДА ​​

Что я делаю неправильно?

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [eventStore requestAccessToEntityType:EKEntityTypeEvent 
           completion:^(BOOL granted, NSError *error) { 
            dispatch_async(dispatch_get_main_queue(), ^{ 
             if (error) 
             { 
              NSLog(@" !! error"); 
              // display error message here 
             } 
             else if (!granted) 
             { 
              NSLog(@"Not Granted"); 
              // display access denied error message here 
             } 
             else 
             { 
              // access granted 

              NSCalendar *calendar = [NSCalendar currentCalendar]; 
              // Create the start date components 
              NSDateComponents *oneWeekAgoComponents = [[NSDateComponents alloc] init]; 
              oneWeekAgoComponents.day = -1; 
              NSDate *oneWeekAgo = [calendar dateByAddingComponents:oneWeekAgoComponents toDate:[NSDate date] options:0]; 
              // Create the end date components 
              NSDateComponents *oneMonthFromNowComponents = [[NSDateComponents alloc] init]; 
              oneMonthFromNowComponents.month = 1; 
              NSDate *oneMonthFromNow = [calendar dateByAddingComponents:oneMonthFromNowComponents toDate:[NSDate date] options:0]; 

              // Create the predicate from the event store's instance method 
              NSPredicate *predicate = [eventStore predicateForEventsWithStartDate:oneWeekAgo endDate:oneMonthFromNow calendars:nil]; 
              // Fetch all events that match the predicate 
              _eventArray = [eventStore eventsMatchingPredicate:predicate]; 

              [self.tableView reloadData]; 

             } 
            }); 
           }]; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 

    EKEvent *event = [self.eventArray objectAtIndex:indexPath.row]; 
    cell.textLabel.text = event.title; 

    if (event.hasNotes) { 
     cell.detailTextLabel.text = event.notes; 
    } else { 
     cell.detailTextLabel.text = @""; 
    } 

    return cell; 
} 
+0

ли вы найти решение для этого? –

ответ

2

Я не полностью разрешил это, но получил ключ.

NSArray *events = [eventStore eventsMatchingPredicate:predicate]; 

Этого не удалось получить. Таким образом, вместо этого я перечисляю возвращаемые события, делая

[eventStore enumerateEventsMatchingPredicate:predicate usingBlock:^(EKEvent *event, BOOL *stop) { 
               NSLog(@"title: %@",event.title); 
               NSLog(@"hasNotes: %s",event.hasNotes ? "YES":"NO"); 
               NSLog(@"notes: %@",event.notes); 
               NSLog(@"-----"); 
               [_eventTitles addObject:event.title]; 
               [_eventTitles addObject:event.hasNotes ? event.notes : @""]; 
              }]; 

Этот номер возвращает фактические примечания (null).

0

У меня была аналогичная проблема, но при доступе к объекту календаря от EKEvent. В моем случае это было потому, что я выпустил экземпляр EKEventStore, прежде чем попытался получить доступ к календарю (в cellForRowAtIndexPath:).

Согласно документации Apple «Чтение и запись Календарь событий»:

Экземпляр хранилище событий не должны быть освобождены перед другими Event Kit объектов; в противном случае может возникнуть неопределенное поведение.

https://developer.apple.com/library/mac/documentation/DataManagement/Conceptual/EventKitProgGuide/ReadingAndWritingEvents.html#//apple_ref/doc/uid/TP40004775-SW1

Смежные вопросы