iPhone-有没有办法取消对EventKit数据库的请求?

iPhone-有没有办法取消对EventKit数据库的请求?,iphone,eventkit,Iphone,Eventkit,我试图弄清楚是否可以取消对EventKit数据库的查询。我使用一个谓词查询EventKit,该谓词匹配某个星期内的所有事件。根据返回的事件数量,此查询可能需要一些时间 我为什么要这个?嗯,在我的iPhone应用程序中,用户可以浏览日历中的几周。每次向用户显示新的一周,应用程序都必须加载该周的所有事件。因为这需要几百毫秒,所以应用程序的响应速度不如它应该的那么快。用户基本上必须浏览得稍微慢一点,因为每次浏览到下一周时,用户界面都会暂停一段时间 我已经在后台线程中使用“performSelector

我试图弄清楚是否可以取消对EventKit数据库的查询。我使用一个谓词查询EventKit,该谓词匹配某个星期内的所有事件。根据返回的事件数量,此查询可能需要一些时间

我为什么要这个?嗯,在我的iPhone应用程序中,用户可以浏览日历中的几周。每次向用户显示新的一周,应用程序都必须加载该周的所有事件。因为这需要几百毫秒,所以应用程序的响应速度不如它应该的那么快。用户基本上必须浏览得稍微慢一点,因为每次浏览到下一周时,用户界面都会暂停一段时间

我已经在后台线程中使用“performSelectorInBackground”运行查询。这仍然会使用户界面停顿不少。我想到的解决方案是,每当用户决定浏览到下一周,当前的EventKit查询就会被取消。这样做的缺点可能是,由于查询被取消,用户有时无法立即看到该周的事件,但用户界面有望始终保持高度响应


那么这有可能吗?有人知道吗?我可以取消EventKit查询吗?也许通过停止正在运行的线程?欢迎任何意见

目前还不清楚您是如何执行查询的。可能使用-[EKEventStore eventsMatchingPredicate:]

另一种方法可能是使用-[EKEventStore enumerateEventsMatchingPredicate:usingBlock:]。对于找到的每个事件,您提供的块将被调用一次,您可以发出停止搜索的信号。做一些类似于:

[eventStore enumerateEventsMatchingPredicate:predicate
       usingBlock:^(EKEvent *event, BOOL *stop) {

          if (event) {
              ...add event to some collection...
          }

          if (shouldStop) {
              *stop = YES;
          }

}];

此调用是同步的,但可以使用dispatch\u async或NSOperation在另一个线程上执行。

是的,您是对的eventsMatchingPredicate是我现在获取事件的当前方式。我在文档中也看到了您建议的方法。但当我快速试用时,我的应用程序似乎完全卡住了(无限循环?)。也许我用得不对。我会再试一次,这似乎是最好的选择!谢谢