запрос на получение coredata для iPhone, основы отношений и разделов - PullRequest
2 голосов
/ 17 ноября 2009

У меня есть, что надеюсь, простой вопрос - у меня есть две сущности - List и ListItem - и между ними установлена ​​связь один ко многим, и все хорошо.

Моя проблема возникает, когда я пытаюсь выполнить запрос на выборку, который вернет элементы списка, разделенные по атрибуту элемента списка. Я не могу выполнить запрос на выборку непосредственно для объектов listItem, потому что нет никакого способа сказать «где список =« 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;
}

Теперь, эти ошибки, потому что они говорят, что я не могу использовать отношение «один ко многим» в дескрипторе сортировки - но это также требует, чтобы у меня был дескриптор сортировки, поэтому я не уверен, что правильный способ сделать это этот. Любая помощь будет великолепна.

1 Ответ

7 голосов
/ 17 ноября 2009

Если вы хотите извлечь и разделить ListItems, то вы должны использовать «ListItem» в качестве вашей сущности для выборки.

В этом случае есть способ сказать «извлечь все объекты ListItem, где List =« xxxxx »», это называется предикатом (NSPredicate).

Попробуйте что-то вроде этого (где "list" - это имя отношения ListItem с List):

NSPredicate *pred = [NSPredicate predicateWithFormat:@"list == %@", listObject];
[fetchRequest setPredicate:pred];

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

...