【问题标题】:Core Data: attributes in many-to-many relationships核心数据:多对多关系中的属性
【发布时间】:2012-05-26 04:41:55
【问题描述】:

我正在开发一个基于 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

这是一个明显的多对多情况,(我知道这不是标准的)订单号存储在相关表中;在 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) 修改播放列表顺序。

有人可以帮我吗?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 其实我忘了说我已经放了。我缺少的是如何在 SongInPlaylist 中创建一个条目,同时指定歌曲和播放列表
    • 我不知道如何在不了解您的 UI 的情况下详细回答这个问题,但基本上,您的用户会做一些事情来表明“将这首歌放在该播放列表中的某个位置”。作为响应,您创建一个新的 SongInPlaylist 实体并填写三个字段。 (我假设您同时拥有歌曲和播放列表对象,因为您可能会以某种方式向用户展示它们。)
    • 另一件事...对于直接数据库编程来说,使用各种 id 是正常的,但在 Core Data 中,您直接使用实体(以防您认为您需要对象中的实际 id 字段)。
    • 是的事实上是我真正缺少的 :) 我已经正确设置了关系,然后为了添加项目我只需要在 SongInPlaylist 项目中设置 Song 对象和 Playlist 对象.非常感谢
    【解决方案2】:
    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];
    

    【讨论】:

    • 这正是我在 Phillip Mills 提出建议后所做的,无论如何谢谢
    【解决方案3】:

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

    【讨论】:

    • 感谢您的回答,我发布给 Philip Mills 的评论也对您的回答有效。
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2016-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      • 2016-09-08
      • 2014-08-13
      • 1970-01-01
      相关资源
      最近更新 更多