我有一個「歌」實體和一個「標籤」實體,它們之間有多對多的關係。歌曲可以有多個標籤,一個標籤可以應用於多首歌曲。核心數據:如何檢查多對多關係的存在
我想檢查一首歌是否有與之相關的特定標籤。如果樂曲的標籤與它相關聯,我想在表格視圖中顯示一個複選標記。
對於類似的邏輯,在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