2011-09-27 43 views
1

我想弄清楚是否有可能取消對EventKit數據庫的查詢。我用一個與特定周內的所有事件匹配的謂詞來查詢EventKit。此查詢可能需要一些時間,具體取決於返回的事件數量。iPhone - 有什麼辦法可以取消對EventKit數據庫的請求嗎?

爲什麼我要這個?那麼,在我的iPhone應用程序中,用戶瀏覽他的日曆周。每當向用戶顯示新的一週時,應用程序都必須加載該周的所有事件。因爲這需要幾百毫秒,所以應用程序並不像應該那樣響應。用戶基本上必須稍微瀏覽一下,因爲每次瀏覽到另一週時,用戶界面都會暫時停頓一段時間。

我已經使用「performSelectorInBackground」在後臺線程中運行查詢。這仍然阻礙了用戶界面。我在想的解決方案是,無論用戶何時決定瀏覽到另一週,當前的EventKit查詢都會被取消。這樣做的缺點可能是用戶有時並沒有立即看到那一週的事件,因爲查詢被取消了,但是用戶界面在任何時候都會有高度的響應。

所以這是可能的嗎?有人知道嗎?我可以取消一個EventKit查詢嗎?也許通過停止正在運行的線程?歡迎任何建議!

回答

2

目前尚不清楚您目前如何執行查詢。可能使用 - [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_async或的NSOperation另一個線程來執行。

+0

是的,你是對的eventsMatchingPredicate是我現在正在抓取事件的當前方式。我也看到了你在文檔中建議的方法。但是,當我很快嘗試了它似乎只是讓我的應用程序完全卡住(無限循環?)。也許我沒有正確使用它。我會再試一次,這似乎是要走的路!謝謝! –

相關問題