Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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
Xcode 在ViewController和CoreData更新之间传递对象_Xcode_Core Data - Fatal编程技术网

Xcode 在ViewController和CoreData更新之间传递对象

Xcode 在ViewController和CoreData更新之间传递对象,xcode,core-data,Xcode,Core Data,我在iOS项目中有一个UITableView。当用户从表中选择一个项目时,该对象将从CoreData中检索并存储在“Player”对象中。然后将该播放器对象传递到另一个视图控制器 我的问题是:如果我对这个玩家对象中的属性进行了更改,那么如何保存这些更改。CoreData如何知道更改了哪个播放器对象?我没有设置playerID属性,因为所有核心数据文档都说它管理自己的ID和引用 更多信息: 因此,目前,我正在这样做(请原谅伪代码,我现在手头没有我的源代码): Player*player1=[NSF

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

我的问题是:如果我对这个玩家对象中的属性进行了更改,那么如何保存这些更改。CoreData如何知道更改了哪个播放器对象?我没有设置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-PerformsgueWithIdentifier:@“游戏”]

我正在将类型为Player的对象传递给gameVC,它没有标识符(因为核心数据不需要显式的ID属性创建-据称!)


那么,gameVC中的MOC如何确切地知道要将任何更改提交给哪些对象呢?

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

以及该托管对象上下文中的所有其他更改,因此请小心其中的更改

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


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

我在原始问题中添加了另一段,以查看我是否理解正确。