iPhone coredata获取请求,关于关系和部分的基础知识

tom*_*tom 2 iphone core-data objective-c relationships

我有一个希望是一个简单的问题 - 我有两个实体 - List和ListItem - 并且它们之间建立了一对多的关系,一切都很好.

我的问题出现在我正在尝试执行fetchrequest时,它将返回由listitem的属性划分的listitems.我不能直接在listItem对象上执行fetchrequest,因为没有办法说'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;
}
Run Code Online (Sandbox Code Playgroud)

现在,这个错误是因为它说我不能在排序描述符中使用一对多关系 - 但它也要求我有一个排序描述符,所以我不确定这样做的正确方法.任何帮助都会很棒.

ger*_*ry3 7

如果你想获取和分割ListItems,那么你应该使用"ListItem"作为获取的实体.

在这种情况下,有一种方法可以说"获取所有ListItem对象Where List ='xxxxx'",它被称为谓词(NSPredicate).

尝试这样的事情(其中"list"是与List的ListItem关系的名称):

NSPredicate *pred = [NSPredicate predicateWithFormat:@"list == %@", listObject];
[fetchRequest setPredicate:pred];
Run Code Online (Sandbox Code Playgroud)

另外,请参阅谓词编程指南.