0

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

我使用 EVENTKIT 框架创建了一个新事件,它向用户显示如下: 在此处输入图像描述

单击完成后..事件保存..

但是当我查看 Kal 日历时,它显示了同一事件的 2 个条目: 在此处输入图像描述

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

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

任何人都可以帮忙吗?

编辑: 当我单击“今天”按钮时,它似乎重置/刷新数据并且它工作正常。我目前正在尝试弄清楚每次添加事件时如何让它刷新/重置。

任何帮助将不胜感激 :)

4

2 回答 2

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];
  });
});
于 2011-06-22T14:21:07.207 回答
0

我对您将事件添加到 Kal 日历中的解决方案感到困惑。我正在阅读头文件和实现文件 KalDataSource.h 和 KalDataSource.m,似乎所有创建事件的代码都应该在那里发生。无论如何,你能告诉我你在 kal 日历中添加事件时做了什么吗?

于 2013-02-23T07:48:55.233 回答