【问题标题】:iPhone coredata fetch request, basics around relationships and sectionsiPhone coredata 获取请求,关系和部分的基础知识
【发布时间】:2009-11-17 14:37:37
【问题描述】:

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

当我尝试执行 fetchrequest 时,我的问题出现了,该请求将返回由列表项的属性划分的列表项。我不能直接在 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;
}

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

【问题讨论】:

    标签: iphone objective-c core-data relationships


    【解决方案1】:

    如果您想获取和划分 ListItems,那么您应该使用“ListItem”作为获取的实体。

    在这种情况下,有一种说法是“获取 List = 'xxxxx' 的所有 ListItem 对象”,它被称为谓词(NSPredicate)。

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

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

    另外,请参阅Predicate Programming Guide

    【讨论】:

    • 谢谢,我没有意识到我需要建立从 listitem 到列表对象的第二个反向关系 - 这样做可以让我像上面一样指定列表。
    • 不确定“第二个反向关系”是什么意思,但 Apple 强烈建议所有关系都是双向的(当缺少这些关系时 Xcode 会给出编译器警告)。
    猜你喜欢
    • 2019-03-19
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    相关资源
    最近更新 更多