Iphone 具有子类NSManagedObject的核心数据谓词
我有一节音频课。此音频有一个SOUND_a子类和一个SOUND_B子类。这一切都做得很正确,工作正常 我有另一个模型,我们叫它PLAYLIST_JOIN,它可以包含(在现实世界中)声音A和声音B,所以我们给它一个音频和播放列表的关系 这一切都在应用程序中起作用 我现在遇到的问题是使用NSPredicate查询PLAYLIST_JOIN表。我想做的是通过在谓词中给它两个键来找到一个确切的PLAYLIST_JOIN项Iphone 具有子类NSManagedObject的核心数据谓词,iphone,objective-c,cocoa-touch,core-data,nspredicate,Iphone,Objective C,Cocoa Touch,Core Data,Nspredicate,我有一节音频课。此音频有一个SOUND_a子类和一个SOUND_B子类。这一切都做得很正确,工作正常 我有另一个模型,我们叫它PLAYLIST_JOIN,它可以包含(在现实世界中)声音A和声音B,所以我们给它一个音频和播放列表的关系 这一切都在应用程序中起作用 我现在遇到的问题是使用NSPredicate查询PLAYLIST_JOIN表。我想做的是通过在谓词中给它两个键来找到一个确切的PLAYLIST_JOIN项 sound_a._sound_a_id = %@ && playl
sound_a._sound_a_id = %@ && playlist.playlist_id = %@
及
主要问题是,由于该表不存储sound\u a
和sound\u b
,而是存储audio
,因此无法使用此语法。我没有重新组织sound_a和sound_b以使用相同的_id属性名称的选项,因此我如何做到这一点
我可以向谓词传递一个方法吗?大概是这样的:
[audio getID]=%@&&playlist\u id=%@
它有点复杂,但您需要向谓词添加第三个条件:
(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
属性只是一个字符串。为什么您不能选择使用相同的_id属性?实体音频应该具有_id属性,SOUND_A和SOUND_B都应该继承该属性。我不想讨论太多细节,但id的引用远程表不同。我可以在谓词周围用if语句包装它,但是如果有一种方法可以像我问题中最后一个代码块那样完成它,我的生活就会轻松得多。谢谢Marcus。我先在你的书中寻找答案:BTW:“难道不应该是2中的一个么?我想不出你的确切逻辑:”你有一个“& &”在你原来的问题上。
(entity.name = sound_a && _sound_a_id = %@ && playlist.playlist_id = %@) && (entity.name = sound_b && sound_b_id = %@ && playlist.playlist_id = %@)