2011-02-23 38 views
0

我是新來的核心數據的世界,我使用的是iOS 4的基本框架,並使用核心數據,來執行對我的本地SQLight DB操作,我設計的離線應用,但在某些時候,當用戶來在線我需要從服務器提取一些更新的數據並將其推送到本地數據庫,同時用戶可能會執行一些插入操作並通過UI將其更新到相同的數據庫中。與並行運算核心數據

所以會有兩套經營在同一時間對同一DB發生的

1)用戶將通過UI做一些插入或更新視圖

2)同步引擎在後臺運行可能是拉一些數據,將其推到本地數據庫

在這種情況下可能存在的問題與共享管理方面被保存[與[上下文保存:&錯誤]],因爲有這方面可能最終有可能保存錯誤的數據。

我能想到的有兩個解決方案,爲同一

1)創建另一個持久性存儲指向同一個數據庫,但這樣做可能會導致較高的內存消耗的設備

2)創建不同的線程的同步引擎,但不知道如何處理它。

你們可以請樹蔭這方面的一些光,還是我完全錯誤的方向在想什麼?

感謝 阿賈伊張以芳

回答

3

就個人而言,我會使用線程。 (其實,我會使用NSOperation,但這只是一個奇特的線程)。

禁止共用線程之間的管理範圍內。

如果你希望你的交易是獨立的(即後臺更新等),使用的每一個不同的管理對象上下文。

您應該只使用一個persistentStoreCoordinator但創建它managedObjectContext爲您的應用程序的每個線程。

這也意味着你無法通過管理線程之間的對象,但它是完全通過的ObjectID也就是說,如果你想告訴主線程的東西已經做到:

// On your background thread . . . 

[managedObjectContext save:nil]; 

NSDictionary *userInfo = [NSDictionary dictionaryWithObjectsAndKeys:[myThing objectID], @"id", nil]; 
[NSNotificationCenter defaultCenter] postNotificationName:@"something-happened" object:self userIfno:userInfo]; 

在主線程你應該使用objectWithID方法爲主線程的managedObjectContext獲取新的託管對象。

See this document for more details

+0

絕不共享線程之間的託管上下文。 +1 – gbk 2014-12-05 06:55:27