我在核心数据中设置了以下模型。
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/