我有一个Core Data模型结构,如下所示:
Product <-->> OrderProduct where the relationship (from Product to OrderProduct) is called productOrders while the inverse is called product
Order <-->> OrderProduct where the relationship is called orderProducts while the inverse is called order
Client <-->> Order where the relationship is called orders while the inverse is called client
在UIViewController
内,我使用与以下谓词相关联的NSFetchRequest
:
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"(ANY productOrders.order.client.code == %@)", clientCode];
谓词效果很好。我能够检索与特定客户关联的一个(或多个)订单的产品。
现在我必须再添一步。查找特定客户的最后一个订单(按日期排序)。我已经尝试了以下谓词,但它不起作用:
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"(ANY productOrders.order.client.code == %@ AND productOrders.order.@max.orderDate)", clientCode];
其中orderDate
的类型为NSDate
。
我必须使用SUBQUERY吗?我怎样才能做到这一点?提前谢谢。
答案 0 :(得分:2)
您可以在fetchrequest上使用sortDescriptor(fetchrequest采用sortdescriptors数组)。
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"productOrders.order.orderDate" ascending:NO];
[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
编辑:请参阅NeverBe评论
答案 1 :(得分:1)
我能够解决从外部传递日期的问题。换句话说,我首先计算了特定客户端的最后订单日期,然后将其传递给感兴趣的元素(实现请求的元素)。
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"ANY productOrders.order.client.code == %@ AND productOrders.order.orderDate == %@", clientCode, lastDate];
我不知道是否可以正确但是有效。
希望它有所帮助。