Это обнаружит измененные события и зарегистрирует названия событий в диапазоне дат. Хотя, я не сделал этого, потому что на практике я не знаю диапазон дат. Мне нужно сравнить со всеми событиями, с которыми я работаю, что означает, что мне нужно обновить их, так как идентификаторы объектов могли быть изменены. Это приводит к тому, что каждое событие не так полезно, и теперь я просто обновляюсь каждые несколько секунд, когда происходят изменения и игнорируются детали. Я надеюсь, что Apple улучшит эти уведомления.
#pragma mark - Calendar Changed
- (void)calendarChanged:(NSNotification *)notification {
EKEventStore *ekEventStore = notification.object;
NSDate *now = [NSDate date];
NSDateComponents *offsetComponents = [NSDateComponents new];
[offsetComponents setDay:0];
[offsetComponents setMonth:4];
[offsetComponents setYear:0];
NSDate *endDate = [[NSCalendar currentCalendar] dateByAddingComponents:offsetComponents toDate:now options:0];
NSArray *ekEventStoreChangedObjectIDArray = [notification.userInfo objectForKey:@"EKEventStoreChangedObjectIDsUserInfoKey"];
NSPredicate *predicate = [ekEventStore predicateForEventsWithStartDate:now
endDate:endDate
calendars:nil];
// Loop through all events in range
[ekEventStore enumerateEventsMatchingPredicate:predicate usingBlock:^(EKEvent *ekEvent, BOOL *stop) {
// Check this event against each ekObjectID in notification
[ekEventStoreChangedObjectIDArray enumerateObjectsUsingBlock:^(NSString *ekEventStoreChangedObjectID, NSUInteger idx, BOOL *stop) {
NSObject *ekObjectID = [(NSManagedObject *)ekEvent objectID];
if ([ekEventStoreChangedObjectID isEqual:ekObjectID]) {
// Log the event we found and stop (each event should only exist once in store)
NSLog(@"calendarChanged(): Event Changed: title:%@", ekEvent.title);
*stop = YES;
}
}];
}];
}
любые подсказки, если это будет принято в AppStore? 'objectID', похоже, является вызовом« private api »в этом случае. –
Я использовал это только для экспериментов, поэтому не знаю. Я думаю, что я обнаружил, что EKEvents ответят на objectID, предположив, что они были NSManagedObjects внутренне (отсюда и тип), но, похоже, это не так, глядя на суперклассы. – Symmetric