重复NSManagedObject

时间:2012-03-06 01:12:51

标签: ios core-data nsmanagedobject nsmanagedobjectcontext

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

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

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

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

核心数据是持久性存储,而不是数据库。因此,无论您要求多少次,这都是确保您获得完全相同的对象的原因。这些不是来自数据库的快照,因为如果您编写了一些自定义SQL代码,它们可能就是这些快照,那些是实际的实时对象。

考虑到这一点,你需要做的是配置你的核心数据架构以匹配你的逻辑架构 - 我想你会有,例如,CardInstance,与卡的一对多关系,你当你从卡片中取出一张卡片时创建CardInstances - 或者写一些代码从读取的卡片读取到快照对象中,就像你手动使用SQL或其他任何东西一样。