Извлечение основных данных - PullRequest
0 голосов
/ 17 апреля 2011

Хорошо, я думал, что у меня есть это, но я не получаю ожидаемые результаты.Надеюсь, кто-то может помочь.

У меня есть две сущности Person и Timesheet с одним отношением атрибут-ко-многим: Person.timesheet <--- >> Timesheet.user.Приведенный ниже код работает, но когда я пытаюсь добавить вторую запись расписания, она, кажется, переопределяет первую?

Я смотрел на документы Apple, и они немного расплывчаты по этому вопросу.

//Add

NSManagedObjectContext *context = self.managedObjectContext;
Person *personAdded = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:context];
Timesheet *timesheet = [NSEntityDescription insertNewObjectForEntityForName:@"Timesheet" inManagedObjectContext:context];;
timesheet.time = @"10:00 Friday";
timesheet.timestamp = [NSDate date];

NSSet *timesheetSet = [NSSet setWithObject:timesheet];

personAdded.name = @"Darren";
personAdded.job = @"Job to be Done";
personAdded.timesheet = timesheetSet;

NSError *error = nil;
[context save:&error];

if (error) {
    NSLog(@"[ERROR] COREDATA: Save raised an error - '%@'", [error description]);
}

NSLog(@"[SUCCESS] COREDATA: Inserted new User to database!");

// Load

NSEntityDescription *personEntity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity: personEntity];

error = nil;
NSArray *results = [context executeFetchRequest:request error:&error];

if (!results || error) {
    NSLog(@"[ERROR] COREDATA: Fetch request raised an error - '%@'", [error description]);
    [request release];
}
NSLog(@"Results: %@",results);

Person *firstUser = [results objectAtIndex:0];

NSLog(@"First User's name: %@",firstUser.name);
NSLog(@"First User's time %@",[[firstUser.timesheet anyObject] valueForKeyPath:@"timestamp"]);

Мне интересно, может ли это быть, потому что я на самом деле устанавливаю ключ Person.timesheet с помощью NSSet, а не фактическую таблицу?ИЛИ может ли быть, что я не правильно называю результаты?

Спасибо, Даррен

1 Ответ

0 голосов
/ 17 апреля 2011

В вашем файле Person.h должен быть сгенерированный метод «CoreDataGeneratedAccessors», который дает вам метод

[personAdded addTimesheet:timesheetSet];

что создает для вас ссылки?

Базовые данные обычно генерируют метод добавления и удаления для любых определенных вами отношений.

Опубликуйте свой файл person.h, если это не ясно.

...