重复的 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的主要内容,如果未能解决你的问题,请参考以下文章

7-3 去掉重复的数据

作业2.有重复全排列和无重复全排列的区别

【R去重】 保留第一个重复/去所有的重复

怎么剔除两个excel表格里重复的资料

检查数组中的重复条目,但仅返回重复的值 [重复]

Oracle中如何删除重复数据