Core data 如何将目标NSManagedObject添加到另一个具有反向多对多核心数据关系的NSManagedObject,而不复制目标NSManagedObject?
我在我的一个项目中遇到了一个问题,我花了十几个小时来寻找解决方案,我取得了一些进展,但仍然没有达到理想的目标。我现在仍在自己寻找解决方案,但我非常感谢任何人能够分享建设性解决方案的见解 问题:Core data 如何将目标NSManagedObject添加到另一个具有反向多对多核心数据关系的NSManagedObject,而不复制目标NSManagedObject?,core-data,nsfetchedresultscontroller,nsmanagedobject,nsmanagedobjectcontext,nsset,Core Data,Nsfetchedresultscontroller,Nsmanagedobject,Nsmanagedobjectcontext,Nsset,我在我的一个项目中遇到了一个问题,我花了十几个小时来寻找解决方案,我取得了一些进展,但仍然没有达到理想的目标。我现在仍在自己寻找解决方案,但我非常感谢任何人能够分享建设性解决方案的见解 问题: 如何将主列表中的目标NSManagedObject作为一个对象添加 另一个NSManagedObject中引用的 每个NSManagedObject之间的多对多关系 在主列表中创建重复的目标NSManagedObject 注意: 下面的示例使用了与完整数据模型图的类比 我真正的项目。这个类比是我最能
- 如何将主列表中的目标NSManagedObject作为一个对象添加 另一个NSManagedObject中引用的 每个NSManagedObject之间的多对多关系 在主列表中创建重复的目标NSManagedObject
- 下面的示例使用了与完整数据模型图的类比 我真正的项目。这个类比是我最能描述这个问题的地方 我有,而类比中的对象并不完全相同 实际项目中对象的名称
- 成分对象的主列表,每个成分对象都是唯一的
其他的 - 配方对象的列表,每个对象都希望具有不同的 用于定义配方对象的配料对象
- 配料对象可以多次插入到单个配方对象中,每次插入都作为唯一计数,而不是将相同的配料作为单个计数
- 我不想复制 主列表,以便能够将多个成分对象添加到每个 配方对象或交叉多个配方对象
- 使用核心数据管理配料和配方,如图2所示 NSManagedObjects
- 已在配料管理对象上创建了名为“allHostRecipes”的关系属性,并将其设置为与配方管理对象的“多对多”关系
- 已在配方管理对象上创建了名为“AllusedComponents”的关系属性,并将其设置为与配料管理对象的“多对多”关系
- 这两个关系设置为“反向”
- 我有一个菜谱描述视图和一个表格视图,其中列出了菜谱中包含的所有成分
- 我创建了另一个配料选择表视图,可以在“配方描述”视图中触发该视图,以选择将要添加到配方中的每个配料
- 每次在配料选择表视图中选择配料时,我都会调用NSFetchedResultsController上的objectAtIndexPath(:),该控件用于配料主列表中的配料表视图,以在其ManagedObjectContext中查找所选配料对象
- 然后,我将所选配料管理对象(SelectedIngredInManagedObject)传递回配方描述视图,并在NSFetchedResultsController上调用mutableSetValueForKey(“AllusedIncoments”).addObject(SelectedIngredInManagedObject),该控件用于获取配方对象中包含的配料
- “用于配料主列表配料表视图的NSFetchedResultsController”和“用于提取配方对象中包含的配料的NSFetchedResultsController”是“配方说明视图的表视图”和“配料选择表视图”中的独立实例变量.但它们引用了相同的ManagedObjectContext
- 可以将所选配料管理对象添加到配方中
- 但是,如果我多次选择相同的成分,它只会在“配方描述”视图的表视图中获得一次计数,而不是通过每次插入显示多个计数,这不是我想要实现的,如上所述
- 我应该做什么或调整以实现我所拥有的功能 如何描述上述内容?
- 在定义“多对多”时,我还应该做什么 核心数据模型中的关系
- “多对多”引用使用NSSet这一事实是否会导致计数问题
- 是否需要创建多个ManagedObjectContext以实现所需的功能
- 我是否应该将选定的配料管理对象克隆为新的配料管理对象?我已经尝试过了,它会将重复的配料添加到配料主列表中。这也不是我想要的。如果我需要克隆它,我如何才能使其正确
Knight您需要稍微重新构建数据:删除从
配方
到成分
的多-多关系,并将其替换为一个中间实体(很难找到一个好的名称,比方说ReceiveRedientDetails
)
创建一个从Recipe
到RecipeIngredientDetails
的一对多关系,比如说allUsedIngredientDetails
,逆(对一)Recipe
同样地,创建一个从成分
到RecipeIngredientDetails
的一对多关系,比如说所有HostRecipeDetails
,与成分相反(对一)
这解决了直接多-多关系的问题,其中每个配方
只能与每个成分
关联一次。(您是正确的,这部分是关系被忽略的结果。)