6
我正在使用NSFetchedResultsController來填充和管理我的表格數據源。如果我更改某些屬性,是否需要手動保存managedObjectContext for NSFetchedResultsController?
當用戶選擇一個特定行,一個actionsheet彈出,然後讓用戶改變的值該行:
NSManagedObject *managedObject = [fetchedResultsController objectAtIndexPath:selectedRowIndexPath];
[managedObject setValue:status forKey:@"status"];
這個作品真的很好,我可以馬上看到tableview中的變化。這意味着NSFetchedResultsController知道某些內容已更改,因此會重新加載該tableviewcell。當我停止並退出我的應用程序(完全)然後重新打開它時,更改不會被保存。
我會認爲NSFetchedResultsConroller負責保存更改。
每次更改後,是否需要使用以下代碼手動保存?
// Save the context.
NSError *error = nil;
if (![self.managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
或者,也許把這個代碼:
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath
forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath
因此,在'didChangeObject'委託方法內部保存並不是一個壞主意? – Pieter 2012-03-14 12:59:57
如果你這樣做了,你可能會出現循環風險。 NSFetchedResultsController委託方法用於更新視圖,而不是模型。所以無論何時保存到上下文中,視圖都會相應地更新(基本上,這樣您就不必重新加載表視圖)。如果要在委託方法中保存上下文,委託方法將繼續觸發,因爲它會注意到上下文中的更改。 – Gobot 2012-03-14 13:05:14
那麼解決方案是什麼? – fatuhoku 2014-04-04 23:19:05