Iva*_*kov 3 ios ekevent ekeventkit ekeventstore
我遇到了问题.我需要知道我的EventStore中的事件何时被更改,所以对于这种情况我使用EKEventStoreChangedNotification但是这个通知返回给我难以理解的字典,userInfo
它看起来像这样:
EKEventStoreChangedObjectIDsUserInfoKey = ("x-apple-eventkit:///Event/p429" );
Run Code Online (Sandbox Code Playgroud)
我不知道如何使用此数据来访问已更改的对象.请帮我
这将检测更改的事件并在日期范围内记录事件标题.虽然,我最终没有这样做,因为在实践中我不知道日期范围.我需要与我正在使用的所有事件进行比较,这意味着我需要刷新它们,因为对象ID可能已经更改.这最终使每个事件都没那么有用,现在我只是在变化进来时每隔几秒刷新一次并忽略细节.我希望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;
}
}];
}];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2256 次 |
| 最近记录: |