2013-06-19 58 views
0

正如標題所述,核心數據上的executeFetchRequest「有時」很慢,甚至可能會阻止用戶界面。核心數據executeFetchRequest慢

我懷疑這是因爲另一個線程正在將內容保存到Core Data中,這阻止了我執行獲取。

我無法將數據保存在後臺線程中並執行獲取,因爲我有機會獲得過時的數據嗎?

我該如何解決這個問題?

+0

如果您在主線程上執行請求,可能會阻止用戶界面。 Coupd你顯示一些你的代碼? –

+1

如果「另一個線程正在將內容保存到核心數據中」,您怎麼能說「我無法在後臺線程中保存數據並執行獲取」?你使用多線程還是不使用?你正在做的取數有多大? – Wain

回答

1

本頁是如何改進核心數據堆棧設計的精彩解釋。 http://www.cocoanetics.com/2012/07/multi-context-coredata/

本質上,它的要點是你有一個後臺上下文(NSPrivateQueueConcurrencyType),它與持久存儲協調器進行交互。這意味着所有昂貴的磁盤寫入操作都將在後臺進行,讓主線程暢通無阻。然後你的主NSManagedObjectContext處理大部分核心數據交互。最後,無論何時您要導入大量新記錄或進行大量處理,都可以創建子上下文並將其父級設置爲主要上下文。這樣,您可以保存孩子,並將更改推送到主要上下文,然後稍後,主要上下文自動保存,然後後臺上下文將更改寫入磁盤。

就我個人而言,我覺得這是一個非常優雅的解決方案,我在其中一個應用中採用了它,並且它的工作非常出色。