Objective c 搜索核心数据关系

Objective c 搜索核心数据关系,objective-c,core-data,nspredicate,nsmanagedobject,nsfetchrequest,Objective C,Core Data,Nspredicate,Nsmanagedobject,Nsfetchrequest,我正想弄清楚为什么这不管用 我有两个实体: Quote Customer 报价与客户具有一对一的关系属性,称为“客户”。客户显然有一个coredataobjectid。我试图搜索所有报价,并根据客户objectID返回与之关联的特定客户的报价。阅读了所有教程后,我终于明白了这一点,但我不断地遇到一个问题: + (void)fetchQuotesForCustomerID:(NSManagedObjectID*)objectID results:(void(^)(NSError* error,

我正想弄清楚为什么这不管用

我有两个实体:

Quote

Customer
报价与客户具有一对一的关系属性,称为“客户”。客户显然有一个coredataobjectid。我试图搜索所有报价,并根据客户objectID返回与之关联的特定客户的报价。阅读了所有教程后,我终于明白了这一点,但我不断地遇到一个问题:

+ (void)fetchQuotesForCustomerID:(NSManagedObjectID*)objectID results:(void(^)(NSError* error, NSArray *fetchedResults))completion {

    NSManagedObjectContext *context = [[QuoteGenerator sharedGenerator] managedObjectContext];

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Quote"
                                              inManagedObjectContext:context];
    [fetchRequest setEntity:entity];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"customer.objectID == %@", objectID];

    [fetchRequest setPredicate:predicate];

    NSError *error;

    NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

    if (error) {
        NSLog(@"fetch error = %@", [error localizedDescription]);
        completion(error, nil);
    } else {
        NSLog(@"fetch count = %d", fetchedObjects.count);
        completion(nil, fetchedObjects);
    }
}
输出错误:

***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因为:“实体中未找到keypath customer.objectID”

断言的设置是否错误?通读文档说明可以使用点语法访问谓词中的属性


请帮忙…

发现睡眠不足,@Gary让我找到了正确的答案

从客户到报价,我应该有很多关系

在比较实体NSManagedObjectID属性时,不必显式声明它。因此,以下对NSPredicate的修改修复了我的问题

NSPredicate*谓词=[NSPredicate谓词格式:@ANY 客户==%@,对象ID]


结果是睡眠不足,@Gary让我找到了正确的答案

从客户到报价,我应该有很多关系

在比较实体NSManagedObjectID属性时,不必显式声明它。因此,以下对NSPredicate的修改修复了我的问题

NSPredicate*谓词=[NSPredicate谓词格式:@ANY 客户==%@,对象ID]


您根本不需要进行获取,核心数据应该在您的客户对象上生成quotes成员,该成员将返回所有相关quote对象的NSSet。

您根本不需要进行获取,核心数据应在您的客户对象上生成quotes成员,该成员将返回所有相关quote对象的NSSet。

如果一个客户可以有多个quotes,为什么不使用一对多关系并简单地使用核心数据来查找相关quote对象?@Gary感谢您的帮助。引导我找到正确的答案!如果一个客户可以有多个报价,为什么不使用一对多关系,只使用核心数据来查找相关报价对象?@Gary感谢您的帮助。引导我找到正确的答案!你的权利!经过一整晚的休息,一切都会好起来:感谢您的帮助。如果没有获取请求,您将失去方便的fetchedResultsController,它为您提供了处理更新和其他内容的巨大可能性。这就是为什么我选择下面的解决方案。你的权利!经过一整晚的休息,一切都会好起来:感谢您的帮助。如果没有获取请求,您将失去方便的fetchedResultsController,它为您提供了处理更新和其他内容的巨大可能性。这就是为什么我选择下面的解决方案。