2011-01-10 43 views
2

我在尋找CoreData和一般實體的幫助。爲了我的問題,可以說我有一個相冊數據庫。我簡單地有一個名爲專輯的實體,名稱,藝術家,年份,專輯封面等屬性。具有多個實體的CoreData編程

現在,讓我們說我想能夠爲這個專輯創建歌曲。我想我應該有一個單獨的實體的歌曲,並與它有一個一對多的關係。但是,我不確定我會如何做到這一點。

由於我有不同的專輯,其中包含不同的歌曲,我想從專輯B中的歌曲與專輯A分開。現在,我可以在歌曲數據庫中有一個專輯它屬於,但是最有效這樣做的方法。如果我有一個重複的相冊名稱會怎麼樣?我嘗試使用創建的時間和名稱創建專輯名稱的唯一「散列」,但有沒有更好的方法。

我還需要一個更好的方式來處理刪除相冊時的刪除。

如果不使用一對多關係,我可以創建兩個獨立的實體,即專輯和歌曲,它們不會鏈接在一起。但是,當我創建一個新相冊時,它會加載一個新的視圖控制器,並將「哈希」時間戳相冊名稱傳遞給視圖控制器。然後當我創建一首新歌曲時,它會在Songs實體中使用哈希時間標記的專輯名稱作爲一行。這樣,當我查看專輯中的哪些歌曲時,我只是設置NSPredicate以僅顯示包含哈希時間戳的查詢。但是,刪除是一個問題,因爲它們沒有關係。

  1. 我應該使用「一對多關係」嗎?
  2. 我應該如何處理確定歌曲是否屬於某個專輯?
  3. 如果他們是多個具有相同名稱的相冊,該怎麼辦?
  4. 我該如何處理刪除?

如果任何人都可以提供任何這些答案,代碼或教程...將不勝感激。

回答

3

所以,我希望這個簡短的答案將讓你在賽道:

一到一對多的關係是適當的相冊 - >歌曲。至於如何創建它 - 假設您有兩個實體,一個名爲「專輯」,另一個名爲「歌曲」。在XCode的數據模型窗口中,選擇你的'album'實體並創建一個新的關係(點擊屬性表中的+按鈕)。

給你的關係一個名字,決定它是否可選(因爲每張專輯必須至少有一首歌曲),並選擇「歌曲」作爲你的目標實體。最後,點擊標記爲「多對多關係」的複選框。就是這樣!

既然已經建立了關係,那麼當您刪除相冊本身時,與某個相冊關聯的任何歌曲都將被刪除。

關於問題3:「如果有多個相同名稱的相冊」。這是相當常見的情況。使用英文字符串作爲主要標識符是非常不尋常的。您希望爲每個相冊設置一些唯一的ID - 這將是您的主要/唯一密鑰。如果您對這意味着什麼感到困惑,那麼在繼續使用Core Data之前,您應該查看一些更基本的數據庫概念以更好地處理它。

+0

非常感謝您的回覆。如果我使用的是多對多關係,我將如何直接從我的相冊實體訪問歌曲。有沒有一種方法或方法來使用這種關係來獲取和設置歌曲實體中的數據。 – Sonny

+0

關係是實體的財產 - 您可以像對待任何其他財產一樣對待它。您可以通過管理對象的NSSet來獲取/設置。本指南可能會幫助您:http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/CoreData/Articles/cdRelationships.html%23//apple_ref/doc/uid/TP40001857-CJBDBHCB – lxt