我已經指定了NSFetchtedResultsController財產...NSFetchedResultsController的didChangeObject不叫
@property (nonatomic, strong) NSFetchedResultsController *controller;
...並設置委託給我的課。
self.controller.delegate = self;
然後,我已經實現了在標題中提到的方法,並在其中放置了一個斷點。
- (void)controller:(NSFetchedResultsController *)controller
didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath
forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath
{
=> BREAKPOINT <=
}
我已經創建用於控制器獲取請求如下:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Post"];
// ... some sort ...
self.controller = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:self.context
sectionNameKeyPath:nil
cacheName:@"cache"];
現在我存儲在相同的上下文另一個類類型「後」的一些NSManagedObjects但didChangeObject
方法從來沒有被稱爲(我的斷點在其中)。
有誰知道發生了什麼問題?
更新#1:從服務器獲取一些帖子並將其存儲到上下文中的類使用GCD異步執行。
更新#2:我以另一種方式嘗試過,因爲它無法在多線程環境中使用上下文。 (感謝svena) 現在ServerConnection
運行在異步模塊(使用GCD)並在主線程上執行一個選擇器。這個選擇器方法將帖子存儲在數據庫中,並且應該更新tableview。基本上,我認爲當我在這種情況下存儲的東西時,應該自動調用didChangeObject
方法?但事實並非如此。 : -/
我添加了一個簡短的序列圖來說明我目前的狀態。 有誰知道爲什麼這不起作用?請耐心等待。我是CoreData和Objective-C的新手。 :)
你有沒有在你的控制器上調用performFetch: – rdelmar
@rdelmar當然是。忘了複製行。它直接在控制器的實例化之後。 ('[self.controller performFetch:&error];') – Chris
數據被正確提取。我將顯示CoreData中的數據,並調用從服務器獲取新結果並將其存儲到此數據庫的方法。每當將新結果插入到CoreData DB(列「Post」)時,我想要在ViewController中獲取通知(didChangeObject事件),以逐行顯示每一行。這應該模擬連續加載。 – Chris