【问题标题】:Core Data many-to-many predicate (again)Core Data 多对多谓词(再次)
【发布时间】:2013-10-04 03:59:56
【问题描述】:

昨天我asked a question关于多对多关系:

我有两个通过多对多关系关联的实体:

Database <<----->> Category

换句话说,一个数据库可以有很多类别,一个类别可以 与许多数据库相关联。

我需要一个 NSPredicate 来返回所有相关的 Category 对象 使用给定的数据库对象。

...并收到了一些非常有用的建议。我现在想问一个不同但相关的问题:

我想要一个 NSPredicate,它将返回所有与给定数据库对象无关的 Category 对象。

我需要它作为谓词,因为它被用作获取结果控制器的一部分。

非常感谢任何帮助。提前致谢!

【问题讨论】:

  • 如果你不能解决这个问题,是否有改变数据模型的空间?
  • 数据模型本身设计得很好,也很有意义,所以我希望有办法解决这个要求——理论上似乎没有那么复杂?
  • NSPredicate *predicate = [NSPredicate predicateWithFormat:@"parent != %@", self.parent];这不工作嘿??
  • 不,它不是,因为它是一对多的关系 - 不是一对一的关系:*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'to-many key not allowed here'

标签: core-data nspredicate


【解决方案1】:

“NOT ANY”查询无法正常工作似乎是核心数据错误 (有关类似问题,请参阅 Core Data NSPredicate with to-Many Relationship)。

作为一种解决方法,您可以将以下谓词与“SUBQUERY”一起使用:

[NSPredicate predicateWithFormat:@"SUBQUERY(databases, $db, $db == %@).@count == 0", theDatabase]

【讨论】:

  • 效果很好。感谢您指出错误并提供解决方法。
【解决方案2】:

尝试使用:

[NSPredicate predicateWithFormat:@"NOT (ANY databases = %@)", database];

或者

[NSPredicate predicateWithFormat:@"NOT(%@ IN databases)", database]

【讨论】:

  • 不幸的是,这不起作用 - 它什么也不返回(我知道有些类别与它应该返回的数据库无关)。
  • 很抱歉还是不行 - 两者都没有返回任何对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
  • 2021-12-07
  • 1970-01-01
  • 2011-01-18
  • 2011-09-04
  • 1970-01-01
相关资源
最近更新 更多