2011-12-30 71 views
1

新年快樂。核心數據和後臺線程問題

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; 
} 
+0

不是真的關係到你的問題,但它確實幫助,如果你的答案分解成更小的塊(垂直空白是你的朋友),可能包括代碼段(高亮和顏色也很酷)等。當我點擊你的問題時,我的第一個想法是「我沒有閱讀所有內容」 – 2011-12-30 14:19:29

+0

嗨保羅,編輯刪除了我的空間,我不知道我是否需要做點什麼,因爲我使用的是鉻合金 – Bjarke 2011-12-30 14:45:17

+1

或者也許我只是因爲我從我的問題中得到的所有頭痛,寫了我的文章才寫得很快:P – Bjarke 2011-12-30 14:47:35

回答

1

根據http://developer.apple.com/library/ios/#documentation/cocoa/Reference/CoreDataFramework/Miscellaneous/CoreData_Constants/Reference/reference.html您的錯誤代碼都代表NSManagedObjectMergeError

因爲你總是獲取同樣的數據,我假設它應該是相同的,你是否從後臺線程或主線程得到它,所以你應該能夠改變你的合併政策從它的默認NSErrorMergePolicyNSOverwriteMergePolicy這將覆蓋任何衝突的對象與新的數據(再次,假設他們是相同的,這不會是一個問題)。

你可以找到更多關於合併的政策在這裏:http://developer.apple.com/library/ios/#documentation/CoreData/Reference/NSMergePolicy_Class/Reference/Reference.html#/

+0

嗨,數據總是相同的,所以我會嘗試這種方法的第一件事,並報告回來,如果它解決了我的問題。 – Bjarke 2011-12-30 14:48:41

+0

顯然這似乎是伎倆,我沒有得到錯誤或任何奇怪的崩潰。我會將新的代碼片段添加到帖子中。 – Bjarke 2011-12-30 15:03:59

+0

PS你救了我的週末:) – Bjarke 2011-12-30 15:04:12