2009-06-15 58 views
7

我正在研究一個應用程序,它將數據保存在外部MySQL服務器中,但使用核心數據在本地緩存它以獲得更好的響應時間。基本上,我想要做的是這樣的:NSFetchedResultsController更新結果沒有新的提取

  1. 取(用NSFetchedResultsController SQLite的數據存儲)從核心數據的數據,並在背景中顯示它
  2. 抓住新的MySQL服務器項目
  3. 用新的數據集(新舊項目)刷新當前表格視圖

除了最後一步,我已經完成了所有工作。我不能完全弄清楚如何使NSFetchedResultsController更新其數據集。到目前爲止,我已經嘗試添加項目直接向它的NSManagedObjectContext:

[NSEntityDescription insertNewObjectForEntityForName:@"Entity" 
           inManagedObjectContext:[fetchedResultsController 
                 managedObjectContext]];

我也試了一下蘋果確實在他們CoreDataBooks例子,使用單獨的「並稱」管理對象上下文和mergeChangesFromContextDidSaveNotification:通話。這兩個似乎都不會改變當前在我提取的結果控制器的託管對象上下文中的NSManagedObject *的集合。

如何更新NSFetchedResultsController當前管理的對象集?

回答

4

我發現我的問題不是對象沒有更新,而是我的NSFetchedResultsController實例沒有正確更新它的節索引標題,因此我無法在我的UITableView中看到結果。

從提取結果控制器更新受管對象上下文確實更新了控制器的結果對象集。

7

只是有你的問題,是顯然使用通知是當表使用nsfetchedresults控制器時可以使tableview刷新的獨特方式。

像核心數據手冊樣本:
第一步:觀察者添加到NSNotificationCenter的通知NSManagedObjectContextDidSaveNotification
第二步:保存上下文(通知觸發你的選擇)
第三步:在您的選擇器方法中:使用mergeChangesFromContextDidSaveNotification合併上下文中的更改
step4:從通知中心刪除觀察者。

個人而言,我想繞過通知certer,只告訴上下文刷新自己該死:)

+0

這的確是我使用的方法,我認爲這是蘋果做它以某種方式的核心數據示例。 – Tim 2009-07-01 15:11:15