核心数据使用Subclassed NSManagedObjects进行谓词化

时间:2010-05-07 00:03:17

标签: iphone objective-c cocoa-touch core-data nspredicate

我有一个音频课程。该音频具有SOUND_A子类和SOUND_B子类。这一切都正确完成,并且工作正常。

我有另一个模型,我们称之为PLAYLIST_JOIN,这可以包含(在现实世界中)SOUND_A和SOUND_B,所以我们给它一个音频和播放列表的关系。

这一切都在应用程序中运行。

我现在遇到的问题是使用NSPredicate查询PLAYLIST_JOIN表。我想要做的是通过在谓词中给出2个键来找到一个确切的PLAYLIST_JOIN项

sound_a._sound_a_id = %@ && playlist.playlist_id = %@

sound_b.sound_b_id = %@ && playlist.playlist_id = %@

主要问题是因为该表不存储sound_asound_b,而是存储audio,所以我无法使用此语法。我没有选择重新组织sound_a和sound_b来使用相同的_id属性名称,所以我该怎么做?

我可以将方法传递给谓词吗?像这样的东西:

[audio getID] = %@ && playlist_id = %@

1 个答案:

答案 0 :(得分:1)

它有点复杂但你需要在谓词中添加第三个条件:

(entity.name = sound_a && _sound_a_id = %@ && playlist.playlist_id = %@) && (entity.name = sound_b && sound_b_id = %@ && playlist.playlist_id = %@)

这假设您正在查询音频摘要并告诉它返回子类。因为从左到右检查条件,如果第一个条件失败,它将继续运行而不会抛出错误,因为_sound_a_id不存在。

第一个条件是引用属于NSEntityDescription的{​​{1}},其NSManagedObject属性只是一个字符串。