Lor*_*o B 5 core-data one-to-many nspredicate ios
我在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.
Run Code Online (Sandbox Code Playgroud)
我设置了以下内容NSPredicate.
NSEntityDescription* entityDescription = [NSEntityDescription entityForName:@"Book" inManagedObjectContext:moc];
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"isSync == 0 AND SUBQUERY(toBookOrders, $x, $x.toBook == SELF)"];
Run Code Online (Sandbox Code Playgroud)
通过这个谓词我只需要抓取未同步的书和他们的相对订单.
这是我收到的错误.
因未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'无法解析格式字符串"isSync == 0 AND SUBQUERY(toBookOrders,$ x,$ x.toBook == SELF)"
有任何想法吗?先感谢您.
Dav*_*ong 25
这是你问题的症结所在:
@"isSync == 0 AND SUBQUERY(toBookOrders, $x, $x.toBook == SELF)"
Run Code Online (Sandbox Code Playgroud)
如果你把它分成两个子预测,正如斯科特建议的那样,你会得到:
isSync == 0SUBQUERY(toBookOrders, $x, $x.toBook == SELF)问题是每个SUBQUERY都不会返回true或false,因为谓词必须.它返回一个集合(一个数组),一个数组与true或false不同.因此,当您创建谓词时,您会收到一个错误,即它是一种无效的格式,因为它之后的AND 内容不是谓词.这只是一个表达.
你可能想要:
@"isSync == 0 AND SUBQUERY(toBookOrders, $x, $x.toBook == SELF).@count > 0"
Run Code Online (Sandbox Code Playgroud)
这会给你一个谓词,找到所有书籍isSync都是假的,至少有一本书OrderBooks就是那本书.
| 归档时间: |
|
| 查看次数: |
4229 次 |
| 最近记录: |