2013-12-05 3 views
0

Я получаю следующую ошибку при первом запуске моего приложения в приложении iOS7, которое я пытаюсь интегрировать с существующим проектом, и не могу выяснить, как устранить эту ошибку.Календарь iOS7 - предикатный вызов календарного демона не удался: Ошибка домена = EKCADErrorDomain Code = 1013

«Predicate вызов календарь демон не удалось: Ошибка домена = EKCADErrorDomain Code = 1013»

код, который вызывает ошибку при первом запуске приложения является:

NSMutableArray *events = [NSMutableArray arrayWithArray:[self.eventStore eventsMatchingPredicate:predicate]]; 

мне нужно делать проверьте, не является ли eventStore (в последней функции) пустым перед использованием инструкции предиката?

Функция определение приведено ниже:

Эта функция гарантирует, что пользователь предоставил разрешение на доступ к календарю.

// Prompt the user for access to their Calendar 
    -(void)requestCalendarAccess 
    { 
     if([self.eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) 
     { 
      [self.eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) 
      { 
       if (granted) 
       { 
        // The user has granted access to their Calendar; let's populate our UI with all events occuring in the next 24 hours. 
        [self accessGrantedForCalendar]; 
       } 
      }]; 
     } 
    } 

Функция, приведенная ниже, вызывается при предоставлении разрешения.

// This method is called when the user has granted permission to Calendar 
    -(void)accessGrantedForCalendar 
    { 
     // Let's get the default calendar associated with our event store 
     self.defaultCalendar = PierceCalendar; 
     // Enable the Add button 
     self.addButton.enabled = YES; 
     // Fetch all events happening in the next 24 hours and put them into eventsList 
     self.eventsList = [self parseEventsByMonth]; 
    } 

Первая строка функции вызывает функцию fetchEvents, содержащую оператор, вызывающий ошибку.

-(NSMutableArray *) parseEventsByMonth 
{ 
    NSMutableArray *allPierceEvents = [self fetchEvents]; 
    .... 
    return parsedEventsByMonth; 
} 

Эта функция выполняет оператор ([self.eventStore eventsMatchingPredicate: сказуемое]), что вызывает ошибку при первом запуске приложения.

// Fetch all events happening in the next 24 hours 
- (NSMutableArray *)fetchEvents 
{ 
    NSMutableArray *pierceEvents = [[NSMutableArray alloc] init]; 

    //Create the end date components 
    NSDateComponents *oneYearAgoComponents = [[NSDateComponents alloc] init]; 
    oneYearAgoComponents.year = -1; 

    NSDate *startDate = [[NSCalendar currentCalendar] dateByAddingComponents:oneYearAgoComponents 
                     toDate:[NSDate date] 
                    options:0]; 

    NSDateComponents *oneYearFromNowComponents = [[NSDateComponents alloc] init]; 
    oneYearFromNowComponents.year = 1; 
    NSDate *endDate = [[NSCalendar currentCalendar] dateByAddingComponents:oneYearFromNowComponents 
                    toDate:[NSDate date] 
                    options:0]; 

    // We will only search the default calendar for our events 
    NSArray *calendarArray = [self.eventStore calendarsForEntityType:EKEntityTypeEvent]; 
    // Create the predicate 
    NSPredicate *predicate = [self.eventStore predicateForEventsWithStartDate:startDate 
                     endDate:endDate 
                    calendars:calendarArray]; 

    // Fetch all events that match the predicate 
    NSMutableArray *events = [NSMutableArray arrayWithArray:[self.eventStore eventsMatchingPredicate:predicate]]; 

    for (EKEvent *event in events) 
    { 
     if (event.calendar == PierceCalendar) { 
      [pierceEvents addObject:event]; 
     } 
    } 

    return pierceEvents; 
} 

ответ