您可能知道,绑定到大纲视图的NSTreeController可以在呈现核心数据实体时显示重复项。NSTreeController显示重复实体的建议解决方案
临时解决方案是将“parent == nil”添加到谓词中,但这只会返回父实体。例如,如果用户正在搜索子实体,则不会显示所请求的子实体。 (提议的)解决方案是对NSTreeController进行子类化并添加一个NSMutableSet变量,用于跟踪当前正在显示的实体。这个变量应该在init上被分配,并在dealloc上释放。
当调用“fetchWithRequest:merge:error:”时,该集应该清空(我不确定这是否比释放它并再次分配它更有效)。每次一个实体将被添加到显示中,检查该集合是否包含它。如果没有,请添加它。否则,找到更接近根(哪个是子实体),并且如果其子实体或者将其与先前包含的交换,则跳过它。
我认为应该对性能的影响相对较小(考虑NSSet使用散列)。我遇到的问题是找到正确的方法来重写以添加此行为。具体来说,NSTreeController在调用“fetchWithRequest:merge:error:”之后处理获取的实体。
如果有人有任何想法或反馈,请告诉我。提前致谢。
您可能想要使用适当的术语来改述。 “实体”和“实体的实例”是两个不同的东西。我认为你的意思是“一个有自己亲子关系的实体的实例。”然而,你对“subentity”的用法是什么,这听起来像是“一个继承了来自父实体的属性/关系的实体”,这在这里没有多大意义。 – 2010-07-03 14:11:40
对不起,不清楚。通过subentity,我的意思是一个实体的实例,它是另一个实体实例的子实体(就像您描述的关系一样)。 – 2010-07-03 19:37:55