在View Controllers和Core Data更新之间传递对象

时间:2012-10-30 10:13:57

标签: xcode core-data

我在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如何确切知道哪些对象要对???进行任何更改

1 个答案:

答案 0 :(得分:1)

您对Player对象所做的更改将应用​​获取播放器的托管对象上下文。如果还将托管对象上下文引用传递给新视图控制器,则可以保存托管对象上下文,并保存更改。

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

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

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