2012-10-30 37 views
0

我在iOS项目中有一个UITableView。当用户从表中选择一个项目时,该对象从CoreData中检索并存储在“Player”对象中。这个播放器对象然后被传递到另一个视图控制器。传递对象beteen ViewControllers和CoreData更新

我的问题是:如果我对这个Player对象中的属性进行更改,那么我该如何保存这些更改。 CoreData如何知道哪个Player对象改变了?我没有设置playerID属性,因为所有核心数据文档都说它管理自己的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,它没有标识符(因为核心数据不需要显式的ID属性创建 - 据称!)

那么gameVC中的MOC如何知道确切的w这些对象提交任何更改?

回答

1

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

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

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

要添加一些更多解释:托管对象上下文是一种便笺本。您将对象从持久存储中移出到上下文中,并且可以对其进行更改。但是,这些更改在保存回持久性存储之前不会持久。如果您希望更加细致地保存,则可以仅使用要更改的对象创建另一个托管对象上下文。保存这个上下文只保存这些对象。但是,对象的更改不会显示在其他托管对象上下文中,除非将其保存回持久性存储中。

+0

我在原来的问题中增加了另一段,看看我是否正确理解。 –