16

このコードの何が問題なのか誰か教えてもらえますか? 次のエラーが発生し、アプリケーションがクラッシュします。

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];

    }
4

4 に答える 4

18

まず、フェッチ エンティティはStudies述語に含まれていないため、Studiesオブジェクトは最初に述語テストを受け取るためです。したがって、述語は少なくとも次のようにする必要があります。

patients.PatientName == %@

ただし、慣例により、patients対多関係を示します。もしそうなら、それは の実際の値がpatients(おそらく)Patientオブジェクトのセットであることを意味します。そのため、上記のようにセットに属性値を要求することはできません。代わりに、述語に一致するセット内のすべてのオブジェクトの新しいセットを要求する必要があります。次のように ANY または All 演算子を使用します。

ALL patients.PatientName == %@

慣例により、すべての属性名と関係名は小文字で始まるため、PatientNameが属性の場合はpatientName.

于 2011-03-03T20:59:11.930 に答える
6

Studies エンティティに患者プロパティがないか、患者関係が指しているエンティティに PatientName プロパティがないか (大文字/小文字の問題に注意してください)、またはその両方です。

于 2011-03-03T15:50:46.027 に答える