【问题标题】:Core Data: Keypath Error Not Found in Entity <NSSQLEntity Studies id=3>核心数据:在实体 <NSSQLEntity Studies id=3> 中未找到密钥路径错误
【发布时间】:2011-07-08 03:59:10
【问题描述】:

谁能告诉我这段代码有什么问题?它会引发以下错误并导致应用程序崩溃:

reason: 'keypath Studies.patients.PatientName not found in entity <NSSQLEntity Studies id=3>'

代码:

 - (void)viewDidLoad {
        [super viewDidLoad];

        test_coredataAppDelegate *appDelegate = (test_coredataAppDelegate *)[[UIApplication sharedApplication] delegate];
        self.context = appDelegate.managedObjectContext;


        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        NSEntityDescription *entity = [NSEntityDescription 
                                       entityForName:@"Studies" inManagedObjectContext:_context];
        [fetchRequest setEntity:entity];
        /**/
        NSLog(patientName);
        [fetchRequest setPredicate:[NSPredicate predicateWithFormat:
                               @"(Studies.patients.PatientName == %@ )",patientName]];



        NSError *error;
        self.StudiessList = [_context executeFetchRequest:fetchRequest error:&error];
        self.title = @"patients"; 
        [fetchRequest release];

    }

【问题讨论】:

    标签: objective-c core-data nspredicate nsfetchrequest


    【解决方案1】:

    首先,由于您的 fetch 实体是 Studies,因此您不将其包含在谓词中,因为 Studies 对象首先是接收谓词测试的对象。所以你的谓词至少应该是:

    patients.PatientName == %@
    

    但是,按照惯例,patients 表示一对多关系。如果是这样,这意味着patients 的实际值是一组(大概)Patient 对象。因此,您不能像上面那样向集合询问属性值:相反,您必须要求集合中与谓词匹配的所有对象的新集合。像这样使用 ANY 或 All 运算符:

    ALL patients.PatientName == %@
    

    我要补充一点,按照惯例,所有属性和关系名称都以小写字母开头,所以如果PatientName 是一个属性,它应该是patientName

    【讨论】:

    • 听起来你需要任何东西。您似乎正在寻找“任何患者。患者姓名等于变量的任何研究”。在这种情况下,ALL 将不合适。只有当所有的 patients.patientName 都具有相同的名称时,all 才会起作用。
    【解决方案2】:

    Study 实体没有患者属性,或者患者关系指向的任何实体都没有 PatientName 属性(注意大写/小写问题)或两者兼有。

    【讨论】:

    • +1 确实,关系案例会给出这个错误。谢谢:)
    【解决方案3】:

    通常当我看到这个错误时,这意味着我向我的模型添加了一个新版本,但忘记更新项目的当前模型版本。

    发布此答案以帮助我未来的自己,因为这不是我第一次登陆此页面!

    【讨论】:

      【解决方案4】:

      在我的例子中,我引用了实体的超类属性,但没有在 xcdatamodel 文件中设置父实体。我必须从检查器菜单中选择另一个 NSManagedObject 子类(默认为无):

      【讨论】:

        猜你喜欢
        • 2021-10-19
        • 2015-08-18
        • 2015-04-10
        • 2011-01-30
        • 2011-04-12
        • 2013-04-05
        • 2017-07-26
        • 2017-02-17
        • 2014-04-12
        相关资源
        最近更新 更多