我在核心数据中设置了以下模型。

Book has a to-many relationship, called toBookOrders, with OrderBook entity. The inverse is called toBook.
Book has a BOOL value property called isSync.

我设置了以下NSPredicate
NSEntityDescription* entityDescription = [NSEntityDescription entityForName:@"Book" inManagedObjectContext:moc];
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"isSync == 0 AND SUBQUERY(toBookOrders, $x, $x.toBook == SELF)"];

通过该谓词,我只需要获取尚未同步的书及其相对顺序。

这是我收到的错误。



有任何想法吗?先感谢您。

最佳答案

这是您问题的症结所在:

@"isSync == 0 AND SUBQUERY(toBookOrders, $x, $x.toBook == SELF)"

如果按照Scott的建议将其分为两个子谓词,您将获得:
  • isSync == 0
  • SUBQUERY(toBookOrders, $x, $x.toBook == SELF)

  • 问题在于,每个SUBQUERY都不会像谓词那样返回true或false。它返回一个集合(一个数组),而数组与true或false不同。因此,当您创建谓词时,会收到错误消息,指出它是无效格式,因为AND之后的内容不是谓词。这只是一个表达。

    您可能想要:
    @"isSync == 0 AND SUBQUERY(toBookOrders, $x, $x.toBook == SELF).@count > 0"
    

    这将为您提供一个断言,以查找isSync为false且该书的OrderBooks至少其中一本是该书的所有书。

    关于ios - NSPredicate和NSInvalidArgumentException中的SUBQUERY,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9803971/

    10-10 20:28