NSPredicate и Core Data: извлечение объектов из отношений - PullRequest
0 голосов
/ 17 февраля 2012

У меня есть структура модели базовых данных, такая как:

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 ]

2 голосов
/ 17 февраля 2012

Вы можете использовать sortDescriptor для своего fetchrequest (fetchrequest принимает массив sortdescriptors).

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"productOrders.order.orderDate" ascending:NO];

[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];

edit: см. Комментарий NeverBe

1 голос
/ 19 февраля 2012

Мне удалось решить проблему с передачей даты извне. Другими словами, я сначала вычислил дату последнего заказа для конкретного клиента, а затем передал ее заинтересованному элементу (который выполняет запрос).

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"ANY productOrders.order.client.code == %@ AND productOrders.order.orderDate == %@", clientCode, lastDate];

Я не знаю, может ли быть правильно, но это работает.

Надеюсь, это поможет.

...