【问题标题】:Core Data simple relationship in code代码中的核心数据简单关系
【发布时间】:2010-11-13 17:04:23
【问题描述】:

我是一名可可新手,正在尝试创建一个包含 Core Data 的 iPhone 应用程序。

我的问题是这样的:我现在有一个小应用程序正在运行,它有一个名为 Playlist 的实体,我显示在表格视图中,并且可以在其中添加和删除条目。

我的 PlayerAppDelegate 中有这些:

playlistManagedObjectModel

playlistListManagedObjectContext

playlistListPersistentStoreCoordinator

添加实体:

Playlist *playlist = (Playlist *)[NSEntityDescription
    insertNewObjectForEntityForName:@"Playlist" 
             inManagedObjectContext:playlistListManagedObjectContext];

现在我想添加一个名为 Song 的子关卡,它具有一对多关系。

添加的播放列表属性:songRelation 添加歌曲属性:playlistRelation

我已经创建了这个实体并设置了两种方式的关系,点击可选标志,因为我希望播放列表中至少有一首歌曲。

设置此关系后,我现在无法再创建播放列表而不会收到警告。问题是“它”也想要一首歌曲,但我不知道如何。

在这种情况下,我找不到一个关于如何添加新播放列表的示例,即何时与另一个必须添加的实体有关系。

我需要创建这些吗:

songManagedObjectModel
songListManagedObjectContext
songListPersistentStoreCoordinator

还是可以通过播放列表实体以某种方式访问​​ Song 实体?

可能是这样的:

添加播放列表

添加歌曲

设置“关系”属性(如何?)

保存到持久存储

或者????

我确实在谷歌上搜索了很多,并且可能误解了这里的一些基本内容,因为没有可用的示例......

Rgds 下午

【问题讨论】:

    标签: iphone cocoa core-data entity-relationship


    【解决方案1】:

    彼得,

    PlayList 模型对象上应该有一个方法,类似于:

    - (void) addSongObject:(Song *)value;
    

    这是一个动态生成的方法,它将一个 Song 值插入到 PlayList 中歌曲的关系中。如果您在添加 Song 关系后尚未生成 PlayList 模型对象,则该方法将不存在。因此,请确保为任何更改的实体生成模型类。

    您传递给 addSongObject 方法的 Song 对象应该使用 ManagedObjectContext 创建,例如:

    Song *song = (Song *)[NSEntityDescription insertNewObjectForEntityForName:@"Song" inManagedObjectContext:playlistListManagedObjectContext];
    

    杰克

    【讨论】:

    • 谢谢杰克,会努力的!虽然不确定如何从实体定义中生成新代码......但现在我知道要寻找什么了。所以基本上我必须从创建播放列表开始,然后添加歌曲?我不能反过来创建一首歌曲,然后创建一个播放列表? (稍后我会有更复杂的关系)如果你有一个完整的序列示例,我会喜欢的!像这样的东西,因为我似乎对这样做的顺序有疑问:1.添加播放列表:代码... 2.保存播放列表:代码... 3.添加歌曲:代码... 4.保存歌曲:代码... 5. 连接它们:代码... Rgds Petter
    • 成功了!新文件...给了我新的 .m 和 .h 文件。然后我用insertNewObjectForEntityForName制作一个播放列表,设置它的属性,然后再次insertNewObjectForEntityForName制作一首歌曲,设置ints属性,然后使用addSong,然后保存上下文。没有意识到所有实体都进入相同的模型和上下文,并且我必须将歌曲添加到播放列表而不是相反。所以,现在我可以继续前进了。再次感谢! PS 网上真的没有这方面的代码或教程(提示...;-)! Rgds PM
    • Petter,由于客户机密,我没有任何可以发布的代码。我同意这方面的教程是一件好事,但我没有大量时间去做。我从使用 CoreData 中学到的是,您需要使用 insertNewObjectForEntityForName 来制作新的空空,并使用 fetch 例程从持久性管理器中提取现有实体。然后使用 addXObject 来管理关系。
    • 是的,杰克,这正是核心数据中管理关系所需的“缺失信息”!也许其他一些读者可以做一个教程或至少用一个很好的例子来总结(我和你有同样的时间问题......;-) Rgds PM
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多