Запрос на выборку coredata для iPhone, основы взаимоотношений и разделов

StackOverflow https://stackoverflow.com/questions/1749316

Вопрос

У меня есть, надеюсь, простой вопрос - у меня есть две сущности - 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];

Кроме того, смотрите Руководство по программированию предикатов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top