新年快樂。核心數據和後臺線程問題
Iam與使用核心數據保存數據的應用程序一起工作。該應用程序包含一個日曆模塊,用戶可以通過兩個按鈕(nextDay,previousDay)在日期之間來回跳轉。每天都包含從Web服務獲取的som信息,因此我想在用戶使用日曆時在後臺獲取大部分數據(接下來的14天)。
因此,這裏是我的方法:
第一天的數據由主線程獲取並保存到持久存儲,並呈現給用戶。然後,在後臺啓動NSThread,並使用新的nsmanagedcontext獲取數據,並在獲取所有數據時將其保存到持久性存儲中。
但是,當這個後臺線程正在運行時,用戶可以選擇跳到第二天或前一天,如果沒有數據,主線程將獲取數據並將其保存到持久存儲中。這提供了兩個線程獲取相同數據並將其保存到持久性存儲的可能性。但據我所知,這種方法不應該是一個問題,因爲我使用新的nsmanangedcontext作爲後臺線程。
但有時出現以下錯誤該操作無法完成。 (可可錯誤133020.)然後主線程無法保存到持久性存儲。
我已經嘗試使用只有一個nsmanagedcontext線程之間共享,但這有時會導致其中一個線程停下來,永遠不會繼續前進。
我花了很多時間閱讀不同的論壇/博客,希望任何人都可以幫助或引導我在正確的方向。
問候
的幫助解決: 我漸漸的錯誤保存到我的持久存儲時,合併過程中的錯誤所致。我可以通過在保存時更改合併策略來解決此問題。以下片段顯示了我的nsmanagedcontext的init方法。大膽顯示政策的設置。我可以這樣做,因爲我提取的數據是相同的,不管它是主線程還是後臺線程。
- (NSManagedObjectContext *)managedObjectContext
{
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil)
{
__managedObjectContext = [[NSManagedObjectContext alloc] init];
[__managedObjectContext setPersistentStoreCoordinator:coordinator];
**[__managedObjectContext setMergePolicy:NSOverwriteMergePolicy];**
}
return __managedObjectContext;
}
不是真的關係到你的問題,但它確實幫助,如果你的答案分解成更小的塊(垂直空白是你的朋友),可能包括代碼段(高亮和顏色也很酷)等。當我點擊你的問題時,我的第一個想法是「我沒有閱讀所有內容」 – 2011-12-30 14:19:29
嗨保羅,編輯刪除了我的空間,我不知道我是否需要做點什麼,因爲我使用的是鉻合金 – Bjarke 2011-12-30 14:45:17
或者也許我只是因爲我從我的問題中得到的所有頭痛,寫了我的文章才寫得很快:P – Bjarke 2011-12-30 14:47:35