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

但现在我不知道如何:

a)将歌曲放入播放列表中的某个索引 b)以正确的顺序在播放列表中获取歌曲 c)修改播放列表顺序。

有人可以帮助我吗?

4

4 回答 4

1

似乎 SongInPlaylist 需要一个position属性。然后,您可以为 PlayList 提供一些方法以在索引处插入、从一个索引移动到另一个索引,或者在可以修复其他 SongInPlaylist 实体的位置值的索引处移除。

于 2012-05-18T15:33:57.213 回答
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];
于 2012-05-18T16:25:56.467 回答
0

在中间添加一个项目,例如“PlaylistEntry”,它指向一首歌曲并有一个订单字段。直接使用 PlaylistEntries 而不是歌曲来构建播放列表。然后,您可以对 order 字段进行排序并对其进行操作以更改 Playlist 的排序。

于 2012-05-18T15:33:15.350 回答
0

这似乎是有序关系的理想用途。只需选中数据模型编辑器中的“Ordered”框,每个播放列表都会按照您指定的顺序保存对其歌曲的引用。

于 2012-05-18T16:59:16.357 回答