1 к 1 отношение ядра данных iOS - PullRequest
0 голосов
/ 08 марта 2012

У меня есть две сущности: Логин (идентификатор пользователя, пароль) и Информация (название, информация).Теперь между ними есть отношение 1 к 1.Мне нужно добавить некоторую информацию в базу данных, уникальную для пользователя.

Мой код приведен ниже:

    Login *information = [NSEntityDescription insertNewObjectForEntityForName:@"Login"
                                                      inManagedObjectContext:self.managedObjectContext];

    information.information.title = informationTitleTextView.text;
    information.information.info_1 = information1textview.text;
    information.information.info_2 = information2textview.text;

    [self.managedObjectContext save:nil];  // write to database

    [self.delegate savebuttontapped:self];

Но это не работает. Я не знаю, что я делаюне так? Любая помощь будет оценена.

1 Ответ

1 голос
/ 08 марта 2012

Вы не добавили экземпляр Information в контекст. Попробуйте это:

Login *login = [NSEntityDescription insertNewObjectForEntityForName:@"Login" inManagedObjectContext:self.managedObjectContext];
Information *information = [NSEntityDescription insertNewObjectForEntityForName:@"Information" inManagedObjectContext:self.managedObjectContext];

login.information = information;
login.information.title = informationTitleTextView.text;
//...and so on...

Конечно, если вы собираетесь получить объект Login на основе его атрибутов, вам нужно будет что-то сохранить в этих атрибутах:

login.userId = theUserId;
login.password = thePassword;

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

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Login"
    inManagedObjectContext:managedObjectContext];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userId like %@ AND password like %@", theUserId, thePassword];
[request setPredicate:predicate];
NSError *err = nil;
NSArray *matchingLogins = [self.managedObjectContext executeFetchRequest:request error:&err];
int count = [matchingLogins count];
if (count != 1) {
    NSLog(@"Houston, we have a problem.");
}
Login *login = [matchingLogins objectAtIndex:0];
Information *info = login.information; // Notice: no separate fetch needed
...