我有一個使用核心數據的iPhone/iPad應用程序。數據通過各種Web服務調用提供。 我使用輪詢機制來確定每個服務調用彼此獨立的時間,以便使信息保持最新。因此,很可能有多個後臺線程使用多個MOC從這些呼叫處理數據。對於插入和更新,這種方法工作正常。 在試圖實現刪除功能時,我的程序崩潰。它似乎是由於一個線程中的上下文刪除了另一個線程也正在處理的託管對象而導致的,因爲刪除的對象已發生故障。具有多個背景線程的核心數據
我一直在尋找解決方案,但並沒有特別針對任何事情。 刪除應該推到主線程的上下文中嗎?爲了完成所有的處理,在Singleton中維護單個線程和伴隨的MOC如何?
任何幫助/指導將不勝感激。
在AppDelegate didFinishLaunchingWithOptions方法中: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changesSaved :) name:NSManagedObjectContextDidSaveNotification object:nil];
這就要求:
- (空)changesSaved:(NSNotification *)注意 { [自performSelectorOnMainThread:@selector(changesSavedOnMainThread :) withObject:注意waitUntilDone:YES]; }
最後,
- (空)changesSavedOnMainThread:(NSNotification *)注意 { \t如果([注對象]!= __managedObjectContext)[__managedObjectContext mergeChangesFromContextDidSaveNotification:note]; } – flizit 2012-03-02 20:57:20
對不起,上面的評論看起來很糟糕。無論如何,我背景這個處理理論上保持主線程儘可能自由。我完全可以調整以瞭解主線程與後臺處理對性能的影響。 – flizit 2012-03-02 20:59:01