Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如果更改某些属性,是否需要手动保存NSFetchedResultsController的managedObjectContext?_Objective C_Ios_Xcode_Nsfetchedresultscontroller - Fatal编程技术网

Objective c 如果更改某些属性,是否需要手动保存NSFetchedResultsController的managedObjectContext?

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中立即看

我正在使用NSFetchedResultsController填充和管理我的表数据源

当用户选择某一行时,会弹出一个操作表,然后允许用户更改该行的值:

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委托方法用于更新视图,而不是模型。因此,无论何时将某些内容保存到上下文中,视图都会相应地更新(基本上不必一直重新加载表视图)。如果要在委托方法中保存到上下文,委托方法将继续激发,因为它会注意到上下文中的更改。那么解决方案是什么?