2012-05-18 89 views
2

我正在研究一個基於核心數據的應用程序(我習慣使用sqlite,但這次我想學習新的東西),而且我被困在這種關係的問題:核心數據:多對多關係中的屬性

我有歌曲和播放列表,我想用一個訂單號碼關聯起來,使播放列表可以是這樣的:

- "Playlist A" 
     1. Song A 
     2. Song C 
     3. Song B 
- "Playlist B" 
     1. Song C 
     2. Song A 
     3. Song B 
     4. Song F 
     5. Song E 

這是一個明顯的許多-2-許多情況下, (我知道這不是標準的)存儲在相關表中的訂單號;在SQL我會做

Table "Songs" (id, name, ecc..) 
    Table "Playlists" (id,name, ecc..) 
    Table "PlaylistSongs" (playlist_id,song_id,position) 

In Core Data i did: 
     Entity "Song" 
     Entity "Playlist" 
     Entity "SongInPlaylist" 

with this relation: 
    Song <---->> SongInPlaylist 
    Playlist <----->> SongInPlaylist 

但現在我不知道如何:

一)把一首歌曲在播放列表中的某些指標 B)得到播放列表中的歌曲順序正確 Ç )修改播放列表順序。

有人可以幫我嗎?

回答

1

看起來SongInPlaylist需要position屬性。然後你可以給PlayList一些方法來插入一個索引,從一個索引移動到另一個索引,或者刪除一個索引來修正其他SongInPlaylist實體的位置值。

+0

其實我忘了說我已經說了。我缺少的是如何在SongInPlaylist中創建一個指定歌曲和播放列表的條目 – kappa

+0

我不確定如何在不知道你的UI的情況下如何回答這個問題,但基本上,你的用戶做了一些事情來表明「把這個歌曲在該播放列表中的某個位置「。作爲迴應,您將創建一個新的SongInPlaylist實體並填寫這三個字段。 (我假設你有可用的歌曲和播放列表對象,因爲你可能以某種方式向用戶顯示它們。) –

+0

另一件事......使用各種ID對於直接數據庫編程來說是正常的,但在Core Data中'直接使用實體(如果你認爲你的對象需要實際的id字段)。 –

0

在中間添加一個項目,如「PlaylistEntry」,指向一首歌曲並且有一個用於定購的字段。直接從播放列表條目而不是歌曲中構建播放列表。然後您可以對訂單字段進行排序並對其進行操作以更改播放列表的排序。

+0

謝謝您的回答,我發佈到Philip Mills的評論也適用於您的答案。 – kappa

1
Song *song = yourSong; 
Playlist *playlist = yourPlaylist; 
NSNumber *position = songsPositionInPlaylist; 

// add song to playlist 
SongInPlaylist *sip = [NSEntityDescription insertNewObjectForEntityForName:@"SongInPlaylist" inManagedObjectContext:yourContext]; 
sip.song = yourSong; 
sip.playlist = yourPlaylist; 
sip.position = songsPositionInPlaylist; 

[yourContext save:nil]; 
+0

這正是我在Phillip Mills建議後所做的,無論如何,謝謝 – kappa

0

看起來這是對有序關係的理想用法。只需在數據模型編輯器中選中「已排序」框,每個播放列表就會按照您指定的順序保存其歌曲的引用。