2011-07-11 32 views
0

我正在使用NSFetchedResultsControllerDelegate檢測打印「Events」的表視圖中的更改。但那些「事件」與「協會」相關聯,包括「isFollowed」號碼(如果Assiciation.isFollow == 1,那麼我們打印該事件,否則我們不會)。我們可以更改這些isFollow BOOL,但NSFetchedResultsControllerDelegate檢測「Events」中的更改,而不是「Association」中的更改。所以我使用這個代碼檢測特定核心數據表中的更改

- (void) viewWillAppear:(BOOL)animated{ 
    //[self setMyFetchedResultsController:nil]; 
    NSError *error = nil; 
    [myFetchedResultsController performFetch:&error]; 
    [[self myTableView] reloadData]; 
} 

重新加載每次表。問題在於它不是非常高效,因爲它每次更新控制器時都會更新,而不僅僅是何時有用。所以我想知道是否有解決方案來檢測核心數據中特定表格中特定行中的更改,或者您是否正在考慮採用更好的方式。

感謝,尼爾斯

回答

0

您可以監視保存通知(見NSManagedObjectDidSaveNotification文檔),並通過他們的研究結果爬到檢查是否有任何關聯了變化。這種方法本質上是低效的。

雖然更好的方法可能是從視圖控制器的委託回調修改關聯,然後強制更新表格單元格/獲取結果控制器。

我認爲它適合在這種情況下簡單地更新表示事件w /後續或無關聯的單個表格單元格。在批量更新的情況下,儘管最好簡單地重新加載整個表格。

+0

有沒有辦法在特定的時間獲取managedObject的哈希碼?例如代碼是3.然後你做了一些改變,保存它們。然後代碼是4.並且當代碼不同時更新。首先,我想到了使用hasChange,但它是爲了未經改變而改變的,在這裏我正在致力於改變。 –

+0

爲什麼在保存通知的NSUpdatedObjects部分中不存在足夠的內容? – ImHuntingWabbits