重复的 NSManagedObject
Posted
技术标签:
【中文标题】重复的 NSManagedObject【英文标题】:duplicate NSManagedObject 【发布时间】:2012-03-06 01:12:51 【问题描述】:我在我的应用程序中使用CoreData
,并且我有一组“卡”实体。玩家可以在他的牌组中拥有多张相同的牌(它仍然是从数据库中提取的同一张牌,但两次添加到数组中)。
当我想修改其中一张重复卡片的某个方面时,我的问题出现了。它们都是NSManagedObjects
的子类,其中有一些自定义属性(未保存到数据库中)。例如,当我在数组中的一张卡片上设置其中一个自定义属性时,它也会在数组中的另一张卡片中更改,因为entityForName:inManagedObjectContext:
返回相同的对象并且不加载新对象。
基本上我需要的是,每次调用entityForName:inManagedObjectContext:
时,我都会获得同一个实体的一个新实例,这样当我在一个中修改自定义属性时,它不会在另一个中被修改。如果实体已经创建但它不起作用,我已经尝试使用 [实体副本]。
提前感谢您的帮助!
【问题讨论】:
【参考方案1】:Core Data 是持久存储,而不是数据库。因此,无论您要求多少次,detre 都确保您得到完全相同的对象。这些不是来自数据库的快照,如果您编写了一些自定义 SQL 代码,它们可能是真实的活动对象。
考虑到这一点,您需要做的就是配置您的核心数据架构以匹配您的逻辑架构——我猜您应该拥有与 Card 一对多关系的 CardInstance,而您'd 创建 CardInstances 用于当您从卡组中拉出卡片时 - 或编写一些代码以从获取的卡片中读取到快照对象中,就像您手动使用 SQL 或其他方式一样。
【讨论】:
以上是关于重复的 NSManagedObject的主要内容,如果未能解决你的问题,请参考以下文章