Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 具有子类NSManagedObject的核心数据谓词_Iphone_Objective C_Cocoa Touch_Core Data_Nspredicate - Fatal编程技术网

Iphone 具有子类NSManagedObject的核心数据谓词

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_B子类。这一切都做得很正确,工作正常

我有另一个模型,我们叫它PLAYLIST_JOIN,它可以包含(在现实世界中)声音A和声音B,所以我们给它一个音频和播放列表的关系

这一切都在应用程序中起作用

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

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 = %@)