Запрос на выборку coredata для iPhone, основы взаимоотношений и разделов
-
20-09-2019 - |
Вопрос
У меня есть, надеюсь, простой вопрос - у меня есть две сущности - List и ListItem - и между ними установлено отношение "один ко многим", все хорошо.
Моя проблема возникает, когда я пытаюсь выполнить fetchrequest, который вернет listitems, разделенные атрибутом listitem.Я не могу выполнить fetchrequest непосредственно для объектов ListItem, потому что нет способа сказать 'Where List = 'xxxxx", поэтому у меня было что-то вроде следующего:
- (NSFetchedResultsController *)getListItems {
// Init a fetch request
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"List" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"listItem.productName" ascending:YES selector:nil];
NSArray *descriptors = [NSArray arrayWithObject:sortDescriptor];
[fetchRequest setSortDescriptors:descriptors];
// Init the fetched results controller
NSError *error;
self.globalFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"listItem.productName" cacheName:@"listItems"];
self.globalFetchedResultsController.delegate = self;
if (![[self globalFetchedResultsController] performFetch:&error]) NSLog(@"Error: %@", [error localizedDescription]);
[fetchRequest release];
[sortDescriptor release];
return self.globalFetchedResultsController;
}
Теперь это ошибка, потому что в нем говорится, что я не могу использовать отношение "один ко многим" в дескрипторе сортировки - но это также требует, чтобы у меня был дескриптор сортировки, поэтому я не уверен, что это правильный способ сделать это.Любая помощь была бы большой.
Решение
Если вы хотите извлекать и разделять ListItems, то вам следует использовать "ListItem" в качестве объекта для выборки.
В этом случае есть способ сказать "извлекать все объекты ListItem, Где List = 'xxxxx'", это называется предикатом (NSPredicate).
Попробуйте что-то вроде этого (где "list" - это имя связи ListItem со списком):
NSPredicate *pred = [NSPredicate predicateWithFormat:@"list == %@", listObject];
[fetchRequest setPredicate:pred];
Кроме того, смотрите Руководство по программированию предикатов.