Я пробовал много решений в stackoverflow, но я не могу найти его. У меня есть базовая модель данных с двумя объектами: Client и Destination. Оба обернуты подклассами NSManagedObject
.Фильтрация с использованием NSPredicate в отношениях один ко многим
У клиента есть некоторые свойства и отношения «один ко многим», называемые пунктами назначения. Destination имеет свойство default_dest, которое обернуто NSNumber
и обратным отношением, называемым клиентом.
У меня есть UITableViewController
, где я использую следующее fetchedController
. Запрос работает хорошо. Я могу получить клиентов, хранящихся в SQLite.
if (fetchedResultsController)
return fetchedResultsController;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Client" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setFetchBatchSize:20];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"code" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
fetchedResultsController.delegate = self;
[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];
return fetchedResultsController;
Я сделал бы еще один шаг. Теперь я буду фильтровать адреса, полученные из предыдущего запроса (которые содержатся в адресах NSSet
) для каждого клиента. В частности, назначение может быть добавлен только если его default_dest значение 1.
Чтобы исправить эту спецификацию я пытался добавить NSPredicate
как следующее:
NSPredicate* predicate = [NSpredicate predicateWithFormat:@"ANY destinations.default_dest == %@", [NSNumber numberWithInt:1]];
Тогда я поставил его в fetchRequest как:
[fetchRequest setPredicate:predicate];
Каждый раз, когда я запускаю запрос, он возвращает адресаты назначения «для многих причин ...». Что это значит?
Я читал iphone-core-data-relationship-fault, но я не понимаю, что это значит.
Итак, мои вопросы: возможно ли достичь аналогичной цели? Если да, есть ли у вас какие-либо предложения?
Примечание
Очевидно, что я мог бы итерацию по направлениям, установленных, но я не знаю, если может быть дорогой итерации и сколько записей есть.