Подтвердить что ты не робот

Основные данные: ошибка ключа не найдена в сущности <Исследования NSSQLEntity id = 3>

Может ли кто-нибудь сказать мне, что случилось с этим кодом? Он вызывает следующую ошибку и приводит к сбою приложения:

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

    }
4b9b3361

Ответ 1

Во-первых, поскольку ваш объект извлечения Studies, вы не включаете его в предикат, потому что объекты Studies - это те, которые получают предикатный тест в первую очередь. Таким образом, ваш предикат должен быть как минимум:

patients.PatientName == %@

Однако, по соглашению, patients будет указывать на отношение to-many. Если это так, это означает, что фактическое значение patients представляет собой набор (предположительно) Patient объектов. Таким образом, вы не можете запросить набор для значения атрибута, как указано выше: вместо этого вы должны попросить новый набор всего объекта в наборе, который соответствует предикату. Используйте оператор "ЛЮБОЙ" или "Все" следующим образом:

ALL patients.PatientName == %@

Я бы добавил, что по соглашению все имена атрибутов и отношений начинаются с строчных букв, поэтому, если PatientName является атрибутом, он должен быть PatientName.

Ответ 2

Либо объект исследования не имеет свойства пациента, либо независимо от того, на что указывает отношение пациентов, у которого нет свойства PatientName (обратите внимание на проблемы с верхним или нижним регистром) или и то, и другое.