Я перепробовал множество решений в stackoverflow, но не смог найти подходящее. У меня есть базовая модель данных с двумя объектами: клиент и пункт назначения. Оба упакованы в подклассы NSManagedObject
.
Клиент имеет некоторые свойства и отношение «один ко многим», называемое пунктами назначения.
У пункта назначения есть свойство default_dest, заключенное в NSNumber
, и обратное отношение, называемое client.
У меня есть 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-Relations-fault , но я не понимаю, что это значит.
Итак, мои вопросы: возможно ли достичь аналогичной цели? Если да, есть ли у вас какие-либо предложения?
Примечания
Очевидно, что я мог бы выполнить итерацию по заданным пунктам назначения, но я не знаю, может ли это быть дорогой итерацией и сколько там записей.