我在我的应用中使用CoreData
,我有一组“卡”实体。玩家可以在他的牌组中拥有多张同一张牌(它仍然是从数据库中拉出的同一张牌,但是在阵列中添加了两次)。
当我想要修改其中一张重复卡片的某个方面时,会出现问题。它们都是子类NSManagedObjects
,它们具有一些自定义属性(未保存到数据库中)。例如,当我在数组中的一张卡上设置其中一个自定义属性时,它也会在数组中的另一张卡中更改,因为entityForName:inManagedObjectContext:
返回相同的对象并且不会加载新的。
基本上我需要的是,每次调用entityForName:inManagedObjectContext:
时,我都会获得同一个实体的新实例,这样当我在一个实例中修改自定义属性时,它也不会在另一个实例中进行修改。如果已经创建了实体但是它不起作用,我已经尝试使用[实体副本]。
提前感谢您的帮助!
答案 0 :(得分:0)
核心数据是持久性存储,而不是数据库。因此,无论您要求多少次,这都是确保您获得完全相同的对象的原因。这些不是来自数据库的快照,因为如果您编写了一些自定义SQL代码,它们可能就是这些快照,那些是实际的实时对象。
考虑到这一点,你需要做的是配置你的核心数据架构以匹配你的逻辑架构 - 我想你会有,例如,CardInstance,与卡的一对多关系,你当你从卡片中取出一张卡片时创建CardInstances - 或者写一些代码从读取的卡片读取到快照对象中,就像你手动使用SQL或其他任何东西一样。