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