有没有人告诉我这段代码有什么问题?它引发以下错误并导致应用程序崩溃:
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];
}
答案 0 :(得分:17)
首先,由于您的获取实体是Studies
,因此您不会在谓词中包含它,因为Studies
对象是首先接收谓词测试的对象。所以你的谓词应该至少只是:
patients.PatientName == %@
但是,按惯例,patients
表示一对多的关系。如果是这样,那意味着patients
的实际值是一组(大概)Patient
个对象。因此,您不能像上面那样向集合请求属性值:相反,您必须要求集合中与谓词匹配的所有对象的新集合。像这样使用ANY或All运算符:
ALL patients.PatientName == %@
我想按照惯例添加所有属性和关系名称都以小写字母开头,所以如果PatientName
是一个属性,它应该是patientName
。
答案 1 :(得分:6)
研究实体没有患者财产,或患者关系指向的任何实体没有PatientName属性(注意大/小写问题)或两者兼而有。
答案 2 :(得分:0)
答案 3 :(得分:0)