2010-05-07 107 views
0

我有一个AUDIO类。该音频具有SOUND_A子类和SOUND_B子类。这一切都正确完成,工作正常。核心数据谓词与子类NSManagedObjects

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

这一切都适用于应用程序。

我现在遇到的问题是使用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 = %@

+0

为什么你没有选择使用相同的_id属性?实体AUDIO应具有_id属性,SOUND_A和SOUND_B应同时继承。 – Yuji 2010-05-07 00:13:50

+0

我不想涉及太多细节,但id的引用远程表不一样。我可以将它封装在谓词周围的if语句中,但如果有一种方法可以像我的问题中的最后一个代码blob那样执行,那么它将使我的生活变得更加轻松。 – coneybeare 2010-05-07 00:19:36

回答

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,它是NSManagedObject的一部分,其name属性只是一个字符串。

+0

谢谢Marcus。我在你的书中寻找答案第一btw :)不应该是一个||在2的中间? – coneybeare 2010-05-07 03:51:27

+0

由你决定,我不知道你确切的逻辑:)你在原始问题中有一个&&。 – 2010-05-07 16:41:48