具有多对多关系的复杂谓词无法正常工作

时间:2012-04-05 11:02:35

标签: iphone ios xcode core-data nspredicate

我有一个应用程序,我可以搜索一个房间来预订它。

在我的第一个视图中,我可以选择一个城市和街道。 在第二个视图中,我可以选择一些属性(如wlan,tv ......)

在第3个视图中是可供选择的房间。

当我没有选择属性时,它应该显示所有可用于所选街道/城市的房间。

到目前为止,这是我的谓词:

   NSPredicate *predicate =
[NSPredicate predicateWithFormat:
 @"((raumattribute.schalter CONTAINS YES) AND\
 (strasse.checks CONTAINS YES OR strasse.standort.ortcheck CONTAINS YES)) \
 OR\
 ((raumattribute.schalter CONTAINS NO) AND\
 (strasse.checks CONTAINS YES OR strasse.standort.ortcheck CONTAINS YES))"];

问题是,我无法使用属性过滤房间。当我选择城市并去房间时,我可以看到城市中的所有房间。 但是一旦我选择了一个属性,它就不会过滤房间,而是显示所选城市中的所有房间。

当我写这样的谓词时:

 NSPredicate *predicate =

[NSPredicate predicateWithFormat:
 @"((raumattribute.schalter CONTAINS YES) AND\
 (strasse.checks CONTAINS YES OR strasse.standort.ortcheck CONTAINS YES)) 

我可以用街道和属性过滤房间。 。但是当没有选择任何属性时,我看不到所选街道中的任何房间。

这是我更新的架构的屏幕截图:Screenshot

1 个答案:

答案 0 :(得分:0)

您错误地将核心数据框架(一个对象图)与SQL数据库替代品混为一谈。这可以讨论 ad nauseam ,所以我们不要进入哲学讨论。

从问题描述中执行此操作的正确方法是按街道过滤房间,然后在结果中迭代以排除那些没有检查属性的房间。生成的数组可能是结果表的datasource

但是,从您的代码示例以及我观察到的德语实体和属性名称,您似乎应该考虑修改数据结构。如果您编辑问题并发布数据模型方案,我可以给您进一步的评论。