Kal显示同一事件的2个单元格

时间:2011-03-30 19:41:56

标签: iphone uitableview calendar eventkit

我创建了一个在标签栏环境中使用Kal框架的iphone应用程序。

我使用EVENTKIT框架创建一个新事件,它向用户显示如下: enter image description here

单击完成后

..事件保存..

但是当我查看Kal日历时,它会显示同一事件的2个条目: enter image description here

IF 我关闭应用程序,然后再次打开它,它会在一个单元格中正确显示事件条目..

但我不明白为什么在我添加它之后它会立即显示两次相同的事件..

有人可以帮忙吗?

修改 当我单击“今天”按钮时,它似乎重置/刷新数据,它正常工作.. 我目前正试图弄清楚每次添加事件时如何刷新/重置它。

任何帮助将不胜感激:)

2 个答案:

答案 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日历中添加事件时做了什么吗?