我创建了一个在标签栏环境中使用Kal框架的iphone应用程序。
我使用EVENTKIT框架创建一个新事件,它向用户显示如下:
单击完成后..事件保存..
但是当我查看Kal日历时,它会显示同一事件的2个条目:
IF 我关闭应用程序,然后再次打开它,它会在一个单元格中正确显示事件条目..
但我不明白为什么在我添加它之后它会立即显示两次相同的事件..
有人可以帮忙吗?
修改 当我单击“今天”按钮时,它似乎重置/刷新数据,它正常工作.. 我目前正试图弄清楚每次添加事件时如何刷新/重置它。
任何帮助将不胜感激:)
答案 0 :(得分:3)
如果您的代码基于NativeCal示例,则
中存在错误- (void)presentingDatesFrom:(NSDate *)fromDate to:(NSDate *)toDate delegate:(id<KalDataSourceCallbacks>)delegate
因为[events removeAllObjects]
在函数顶部被调用,然后在dispatch_async
块中重新填充,所以如果在第一次调用完成之前再次调用该函数,则事件列表可以包含重复事件。我通过将dispatch_async
调用更改为dispatch_sync
来阻止回调主线程并清除该调用中的事件列表,从而产生以下代码:
dispatch_async(eventStoreQueue, ^{
NSDate *fetchProfilerStart = [NSDate date];
NSPredicate *predicate = [eventStore predicateForEventsWithStartDate:fromDate endDate:toDate calendars:nil];
NSArray *matchedEvents = [eventStore eventsMatchingPredicate:predicate];
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"Fetched %d events in %f seconds", [matchedEvents count], -1.f * [fetchProfilerStart timeIntervalSinceNow]);
[events removeAllObjects];
[events addObjectsFromArray:matchedEvents];
[delegate loadedDataSource:self];
});
});
答案 1 :(得分:0)
我很困惑你将事件添加到Kal日历中的解决方案。我正在阅读头文件和实现文件KalDataSource.h和KalDataSource.m,似乎所有创建事件的代码都应该出现在那里。无论如何,你可以告诉我你在kal日历中添加事件时做了什么吗?