2014-09-26 8 views
2

Xcode 6.0.1을 사용 중이므로 Event Kit로 테스트 응용 프로그램을 만듭니다. 다음 코드는 각 이벤트의 제목을 성공적으로 채우지 만 hasNotes 속성이 YES를 반환하는 경우에도 해당 노트는 (null)로 반환됩니다. 그리고 iPhone의 기본 캘린더 앱에서 동일한 이벤트의 메모를 볼 수 있습니다.EKEvent.hnNotes가 YES를 반환하는 경우에도 EKEvent.notes가 null을 반환합니다.

내가 뭘 잘못하고 있니?

- (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에서 캘린더 개체에 액세스 할 때 발생했습니다. 나는 캘린더 (cellForRowAtIndexPath:)에 액세스하려고 시도하기 전에 EKEventStore 인스턴스를 릴리스했기 때문에 이것이 내 경우입니다.

애플 문서에 따르면 "읽기와 쓰기 일정 이벤트"이벤트 저장소 인스턴스가 다른 이벤트 키트 객체 이전에 출시되지 않아야

; 그렇지 않으면 정의되지 않은 동작이 발생할 수 있습니다.

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

관련 문제