我有一个音频课程。该音频具有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_a
和sound_b
,而是存储audio
,所以我无法使用此语法。我没有选择重新组织sound_a和sound_b来使用相同的_id属性名称,所以我该怎么做?
我可以将方法传递给谓词吗?像这样的东西:
[audio getID] = %@ && playlist_id = %@
答案 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
属性只是一个字符串。