Objective c 如果更改某些属性,是否需要手动保存NSFetchedResultsController的managedObjectContext?
我正在使用NSFetchedResultsController填充和管理我的表数据源 当用户选择某一行时,会弹出一个操作表,然后允许用户更改该行的值:Objective c 如果更改某些属性,是否需要手动保存NSFetchedResultsController的managedObjectContext?,objective-c,ios,xcode,nsfetchedresultscontroller,Objective C,Ios,Xcode,Nsfetchedresultscontroller,我正在使用NSFetchedResultsController填充和管理我的表数据源 当用户选择某一行时,会弹出一个操作表,然后允许用户更改该行的值: NSManagedObject *managedObject = [fetchedResultsController objectAtIndexPath:selectedRowIndexPath]; [managedObject setValue:status forKey:@"status"]; 这非常有效,我可以在tableview中立即看
NSManagedObject *managedObject = [fetchedResultsController objectAtIndexPath:selectedRowIndexPath];
[managedObject setValue:status forKey:@"status"];
这非常有效,我可以在tableview中立即看到更改。这意味着NSFetchedResultsController知道某些内容已更改,因此会重新加载该tableviewcell。当我停止并退出我的应用程序(完全)然后重新打开它时,更改不会保存
我认为NSFetchedResultsColler负责保存更改
每次更改后是否需要使用以下代码手动保存
// 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
你说得对。您需要手动将上下文保存到存储。NSFetchedResultsController从上下文中获取数据,但不将数据保存到存储。因此,将数据保存在“didChangeObject”委托方法中不是一个坏主意?如果这样做,则可能会出现循环。NSFetchedResultsController委托方法用于更新视图,而不是模型。因此,无论何时将某些内容保存到上下文中,视图都会相应地更新(基本上不必一直重新加载表视图)。如果要在委托方法中保存到上下文,委托方法将继续激发,因为它会注意到上下文中的更改。那么解决方案是什么?