Ios 重复NSManagedObject

Ios 重复NSManagedObject,ios,core-data,nsmanagedobject,nsmanagedobjectcontext,Ios,Core Data,Nsmanagedobject,Nsmanagedobjectcontext,我在我的应用程序中使用CoreData,我有一组“卡片”实体。玩家的牌组中可以有多张相同的牌(仍然是从数据库中取出的同一张牌,但在阵列中添加了两次) 当我想修改其中一张复制卡的某个方面时,就会出现问题。它们都是子类NSManagedObjects,具有一些自定义属性(未保存到数据库中)。例如,当我在阵列中的一张卡上设置一个自定义属性时,该属性在阵列中的另一张卡上也会发生更改,因为entityForName:inManagedObjectContext:返回相同的对象,并且不会加载新对象 基本上,

我在我的应用程序中使用
CoreData
,我有一组“卡片”实体。玩家的牌组中可以有多张相同的牌(仍然是从数据库中取出的同一张牌,但在阵列中添加了两次)

当我想修改其中一张复制卡的某个方面时,就会出现问题。它们都是子类
NSManagedObjects
,具有一些自定义属性(未保存到数据库中)。例如,当我在阵列中的一张卡上设置一个自定义属性时,该属性在阵列中的另一张卡上也会发生更改,因为
entityForName:inManagedObjectContext:
返回相同的对象,并且不会加载新对象

基本上,我需要的是每次调用
entityForName:inManagedObjectContext:
,我都会得到同一实体的一个新实例,这样当我修改一个实体中的自定义属性时,另一个实体中的自定义属性也不会被修改。如果实体已经创建但不起作用,我已经尝试使用[entity copy]


提前感谢您的帮助

核心数据是持久存储,而不是数据库。所以,无论你要多少次,detre都会确保你能得到完全相同的东西。这些不是来自数据库的快照,如果您编写一些自定义SQL代码,它们可能是真实的活动对象

考虑到这一点,您需要做的是配置您的核心数据模式以匹配您的逻辑模式-我想您可能会有,比如说,CardInstance,与卡有一对多关系,并且您会为从卡组中取出卡时创建CardInstance-或者编写一些代码以从取出的卡读取到快照对象,就好像您是在手动使用SQL或其他工具一样