NSPredicate和NSInvalidArgumentException中的SUBQUERY
我在Core Data中设置了以下模型。
Book has a to-many relationship, called toBookOrders, with OrderBook entity. The inverse is called toBook. Book has a BOOL value property called isSync.
我build立了以下NSPredicate
。
NSEntityDescription* entityDescription = [NSEntityDescription entityForName:@"Book" inManagedObjectContext:moc]; NSPredicate* predicate = [NSPredicate predicateWithFormat:@"isSync == 0 AND SUBQUERY(toBookOrders, $x, $x.toBook == SELF)"];
通过这个谓词,我只需要抓取没有同步的书籍和他们的相关命令。
这是我收到的错误。
终止应用程序由于未捕获exception“NSInvalidArgumentException”,原因:“无法parsing格式string”isSync == 0和子查询(toBookOrders,$ x,$ x.toBook == SELF)“
有任何想法吗? 先谢谢你。
这是你的问题的症结所在:
@"isSync == 0 AND SUBQUERY(toBookOrders, $x, $x.toBook == SELF)"
如果你按照斯科特的说法把它分成两个子集,你会得到:
-
isSync == 0
-
SUBQUERY(toBookOrders, $x, $x.toBook == SELF)
问题是每一个SUBQUERY
都不会像谓词一样返回真或假。 它返回一个集合(一个数组),一个数组与真或假不是一回事。 因此,当你创build谓词的时候,你会得到一个错误,认为它是一个无效的格式,因为AND
之后的东西不是一个谓词 。 这只是一个expression。
你可能想要:
@"isSync == 0 AND SUBQUERY(toBookOrders, $x, $x.toBook == SELF).@count > 0"
这会给你一个谓词来查找isSync
为false的所有书籍,而Book的OrderBooks
中至less有一本是Book。
将isSync == 0
和SUBQUERY
分离成单独的NSPredicate
,将它们添加到一个NSArray
然后使用[NSCompoundPredicate andPredicateWithSubpredicates:array]
将它们合并成一个单独的NSFetchSpecification
。