Календарь iOS7 - Предикат вызова демона календаря не удался: домен ошибки = EKCADErrorDomain Code = 1013

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

«Предикатный вызов демона календаря не выполнен: домен ошибки = код EKCADErrorDomain = 1013»

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

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

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

Определения функций приведены ниже:

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

// 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:predicate]), которая вызывает ошибку при первом запуске приложения.

// 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;
}

person Vahe Jabagchourian    schedule 05.12.2013    source источник


Ответы (1)


Я вставил оператор перед строкой, вызывающей ошибку, чтобы устранить ошибку.

[self.eventStore reset];

Я нашел подсказку от:

calendarsForEntityType:EKEntityTypeReminder пуст в первый раз, работает впоследствии

person Vahe Jabagchourian    schedule 05.12.2013