核心数据:多对多关系中的属性

时间:2012-05-18 15:27:20

标签: objective-c ios core-data many-to-many entity-relationship

我正在开发一个基于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)修改播放列表顺序。

有人可以帮助我吗?

4 个答案:

答案 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)

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