获取核心数据关系

时间:2011-04-17 14:34:32

标签: iphone ios4 core-data entity-relationship

好吧,我以为我有这个,但我没有得到我期待的结果。希望有人可以提供帮助。

我有两个实体Person和Timesheet,其中一个属性与多个关系: Person.timesheet< --->> Timesheet.user。 下面的代码有效,但当我尝试添加第二个时间表条目时,它似乎覆盖了第一个?

我查看了Apple Docs,他们在这个问题上有点模糊。

//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"]);

我想知道是否可能因为我实际上是在设置带有NSSet的Person.timesheet键而不是实际的表?或者可能是因为我没有正确地调用结果?

谢谢, 达伦

1 个答案:

答案 0 :(得分:0)

你的Person.h文件中应该有一个生成的“CoreDataGeneratedAccessors”方法,它为你提供了一个方法

[personAdded addTimesheet:timesheetSet];

为您创建链接?

核心数据通常会为您定义的任何关系生成添加和删除方法。

如果不清楚,请发布你的person.h文件。