我正在开发一个基于Core Data的应用程序(我以前习惯使用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
但现在我不知道如何:
a)将某首歌放在某个索引的播放列表中 b)以正确的顺序获取播放列表中的歌曲 c)修改播放列表顺序。
有人可以帮助我吗?
答案 0 :(得分:1)
SongInPlaylist似乎需要position
属性。然后,您可以为PlayList提供一些方法来插入索引,从一个索引移动到另一个索引,或者在索引处删除以修复其他SongInPlaylist实体的位置值。
答案 1 :(得分: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];
答案 2 :(得分:0)
在中间添加一个项目,例如“PlaylistEntry”,它指向一首歌并且有一个订单字段。直接从PlaylistEntries而不是Songs构建播放列表。然后,您可以对订单字段进行排序并对其进行操作以更改播放列表的排序。
答案 3 :(得分:0)
这似乎是有序关系的理想用途。只需选中数据模型编辑器中的“有序”框,每个播放列表将按照您开的顺序保存对其歌曲的引用。