【问题标题】:Kal showing 2 cells for the same eventKal 显示同一事件的 2 个单元格
【发布时间】:2011-03-30 19:41:55
【问题描述】:

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

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

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

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

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

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

谁能帮忙?

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

任何帮助将不胜感激:)

【问题讨论】:

    标签: iphone uitableview calendar eventkit


    【解决方案1】:

    如果您的代码基于 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];
      });
    });
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-21
        • 2021-12-30
        相关资源
        最近更新 更多