我有一个“歌”实体和一个“标签”实体,它们之间有多对多的关系。歌曲可以有多个标签,一个标签可以应用于多首歌曲。核心数据:如何检查多对多关系的存在
我想检查一首歌是否有与之相关的特定标签。如果乐曲的标签与它相关联,我想在表格视图中显示一个复选标记。
对于类似的逻辑,在Apple“TaggedLocations”示例代码中,进行以下检查以检查关系是否存在。
if ([event.tags containsObject:tag]) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
这可能是低效的,如果没有在数据库中有很多标签,因为这将在存储器中取出所有的人。如果我在这里错了,请纠正我。
有没有更有效的方法来检查歌曲是否与特定的标签相关联,而不是检查Song.Tags?
感谢您的解释。 恕我直言,它仍然意味着同时获取并保存所有关联的标记对象。如果数据库中有1000个相关标签会怎么样? 在我现在的非核心数据实现中,我有一个中间连接表来检查关联的存在。 核心数据文件说核心数据为多对多关系中间连接表吗?有没有办法编写一个谓词来使用中间连接表属性,并避免读取内存中的所有对象? – siasl 2009-09-10 22:57:12
您不能利用中间连接表。它由Core Data内部透明地使用。有一种特殊情况,您可以在其中明确添加介于两个原始实体之间的第三个中间实体,如Apple“核心数据编程指南”中名为“关系和获取属性”一节中所述,并在此部分中查看在“多对多关系”上。您必须决定您的歌曲/标签关系是否可以像他们的朋友示例中那样建模(可能不是)。 – 2009-09-11 09:49:21
Yeah歌曲/标签并不适合该模型,感叹! – siasl 2009-09-11 10:04:46