具有多个实体的CoreData编程

时间:2011-01-10 14:15:12

标签: iphone ios core-data entity-relationship

我正在寻找CoreData和一般实体的帮助。出于我的问题的目的,让我说我有一个专辑数据库。我简单地有一个名为专辑的实体,其名称,艺术家,年份,专辑艺术等属性。

现在,我想说我希望能够为这张专辑创作歌曲。我想我应该有一个单独的歌曲实体,并与它有一对多的关系。但是,我不确定我该怎么做。

由于我有不同的专辑,其中包含不同的歌曲,我想将专辑B中的歌曲与专辑B分开。现在,我可以在歌曲数据库中找到它所属专辑的一行,但这是最有效的方式去做这个。如果我有一个重复的专辑名称怎么办?我尝试使用创建的时间和名称创建专辑名称的唯一“哈希”,但有更好的方法。

我还需要一种更好的方法来处理删除相册时的删除。

在不使用一对多关系的情况下,我能够创建两个独立的实体,即专辑和歌曲,它们没有链接在一起。但是,当我创建一个新专辑时,它会加载一个新的viewcontroller并将“hashes”带时间戳的专辑名称传递给viewcontroller。然后,当我创建一首新歌时,它会将带有时间戳记的哈希专辑名称用作歌曲实体中的一行。这样,当我查看专辑中的哪些歌曲时,我只是设置NSPredicate以仅显示包含哈希时间戳的查询。但是,删除是一个问题,因为它们没有关系。

  1. 我应该使用“一对多关系”吗?
  2. 如何确定某首歌是否属于某张专辑?
  3. 如果他们是多个同名的相册怎么办?
  4. 如何处理删除?
  5. 如果有人能为这些中的任何一个提供答案,代码或教程......我们将不胜感激。

1 个答案:

答案 0 :(得分:3)

所以,希望这个简短的回答能让你走上正轨:

一对多关系适用于专辑 - >歌曲。至于如何创建它 - 让我们假设你有两个实体,一个叫做“album”,另一个叫做“song”。在XCode的数据模型窗口中,选择“相册”实体并创建新关系(点击属性表中的+按钮)。

给你的关系一个名字,决定它是否是可选的(人们不会假设,因为每张专辑必须至少有一首歌),并选择“song”作为你的目标实体。最后,单击标记为“To-Many relationship”的复选框。就是这样!

现在您已经建立了关系,当您删除相册时,任何与相册相关联的歌曲都将被删除。

关于问题3:“如果有多个相同名称的专辑会怎么样”。这是相当常见的情况。使用英文字符串作为主要标识符是非常不寻常的。您希望为每张专辑提供某种独特的ID - 这将是您的主要/唯一键。如果你对这意味着什么感到困惑,你应该先研究一些更基本的数据库概念,以便在继续使用Core Data之前更好地处理它。