我在iOS项目中有一个UITableView。当用户从表中选择一个项目时,该对象将从CoreData中检索并存储在“Player”对象中。然后将此播放器对象传递到另一个视图控制器。
我的问题是:如果我对此Player对象中的属性进行了更改,那么我该如何保存这些更改。 CoreData如何知道哪个Player对象发生了变化?我没有设置playerID属性,因为所有Core Data文档都说它管理自己的ID和引用。
更多
所以,此刻,我正在做这个(请原谅伪代码,我现在没有我的源代码):
Player *player1 = [NSFetchResultController objectAtIndex:0]
Player *player2 = [NSFetchResultController objectAtIndex:1]
GameViewController *gameVC = [[GameViewController alloc] init]
gameVC.player1 = player1;
gameVC.player2 = player2;
gameVC.managedObjectContext = self.managedObjectContext
[self performSegueWithIdentifier:@"Game"]
我将类型为Player的对象传递给gameVC,它没有标识符(因为Core Data不需要显式ID属性创建 - 据称!)
那么gameVC中的MOC如何确切知道哪些对象要对???进行任何更改
答案 0 :(得分:1)
您对Player对象所做的更改将应用获取播放器的托管对象上下文。如果还将托管对象上下文引用传递给新视图控制器,则可以保存托管对象上下文,并保存更改。
除了该托管对象上下文中的所有其他更改外,请注意其中的更改。
回答您编辑过的问题;当您保存moc时,您没有保存特定对象,而是保存管理对象上下文中的所有更改。因此,它不需要知道要保存哪些对象。
添加更多解释:托管对象上下文是一种便笺簿。将对象从持久性存储中拉出到上下文中,然后可以对其进行更改。但是这些更改在保存回持久存储之前不会持久。如果您想更加细化保存,可以只使用要更改的对象创建另一个托管对象上下文。保存此上下文仅保存这些对象。但是,在将对象保存回持久存储之前,对对象的更改不会显示在其他托管对象上下文中。