0

我在 iOS 项目中有一个 UITableView。当用户从表中选择一个项目时,该对象将从 CoreData 中检索并存储在“播放器”对象中。然后将此播放器对象传递给另一个视图控制器。

我的问题是:如果我对此 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 是如何准确地知道哪些对象要提交任何更改呢???

4

1 回答 1

1

您对 Player 对象所做的更改会应用播放器被提取到的托管对象上下文。如果您也将托管对象上下文引用传递给新的视图控制器,那么您可以保存托管对象上下文并且将保存更改。

除了该托管对象上下文中的所有其他更改外,请注意其中的更改。

回答您编辑的问题;当您保存 moc 时,您并没有保存特定的对象,而是保存了管理对象上下文中的所有更改。所以它不需要知道要保存哪些对象。

添加更多解释:托管对象上下文是一种便笺簿。您将对象从持久存储中拉出到上下文中,您可以对其进行更改。但是这些更改在保存回持久存储之前不会持久。如果您想更详细地保存您的保存,您可以创建另一个托管对象上下文,其中仅包含您要更改的对象。保存这个上下文只会保存那些对象。但是,对对象的更改将不会显示在其他托管对象上下文中,直到您将它们保存回持久存储中。

于 2012-10-30T10:20:19.127 回答