2010-02-18 59 views
2

我今晚花了幾個小時嘗試創建一個設置,我有三個託管對象上下文 - 一個連接到我的應用程序的代理,一個負責UITableView更新(通過NSFetchedResultsController)和NSOperation子類。如何保持多個NSManagedContext同步?

我可以從NSOperation子類應用程序委託的變化通過觀察NSManagedObjectContextDidSaveNotification,並在我的主線程發射了mergeChangesFromContextDidSaveNotification:通過就好了流動,但是當我試圖從我UITableView數據源做同樣的事情,我得到以下異常:

2010-02-19 02:00:39.750 MyApp[44687:207] Serious application error. Exception was caught during Core Data change processing: *** -[NSCFArray initWithObjects:count:]: attempt to insert nil object at objects[0] with userInfo (null) 
2010-02-19 02:00:39.750 MyApp[44687:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFArray initWithObjects:count:]: attempt to insert nil object at objects[0]' 

我會很感激任何意見 - 我以前所有的涉及核心數據管理對象上下文都非常簡單1設計:1同步方案。我所提議的甚至可能嗎?

+1

你使用過調試器嗎?它是什麼告訴你關於你試圖將nil插入到NSArray的?具體來說,打破objc_exception_throw並找出導致此問題的部分代碼。 – 2010-02-18 15:08:03

+0

約書亞,它實際上來自何處: - (無效)控制器:(NSFetchedResultsController *)控制器didChangeObject:(ID)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)型newIndexPath:(NSIndexPath *)newIndexPath { \t NSArray * paths = [NSArray arrayWithObject:newIndexPath]; 顯然,NSArray不能由{0,0}的索引路徑初始化。仍然在研究爲什麼會發生這種情況。 – 2010-02-19 00:00:08

回答

9

一個更好的問題是爲什麼你想保持多個上下文同步。有兩個,一個用於主要應用程序用途,另一個用於導入有意義,但導入上下文不需要保持同步,並且您已經知道如何從導入上下文提供主要上下文。

那麼第三個上下文是什麼呢?如果它僅用於表視圖更新,那麼這是一個糟糕的設計,應該爲整個UI層使用單個上下文。這很可能是你的問題的正確解決方案,而不是試圖保持三種背景在空中混雜。

+0

這就是我需要聽到的答案。出於某種原因,我確信自己(凌晨2點)我需要另一個託管對象上下文。我只是貪心! 一如既往,馬庫斯! – 2010-02-18 22:38:41