NSPredicate и Core Data: извлечение объектов из отношений
У меня есть структура модели 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? Как мне этого добиться? Заранее спасибо.
2 ответа
Я смог решить проблему с передачей даты извне. Другими словами, я сначала вычислил дату последнего заказа для конкретного клиента, а затем передал ее заинтересованному элементу (который реализует запрос).
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"ANY productOrders.order.client.code == %@ AND productOrders.order.orderDate == %@", clientCode, lastDate];
Я не знаю, может ли быть правильно, но это работает.
Надеюсь, поможет.
Вы можете использовать sortDescriptor для вашего fetchrequest (fetchrequest принимает массив sortdescriptors).
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"productOrders.order.orderDate" ascending:NO];
[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
редактировать: см. комментарий NeverBe