Iphone 核心数据关系获取

Iphone 核心数据关系获取,iphone,ios4,core-data,entity-relationship,Iphone,Ios4,Core Data,Entity Relationship,好的,我以为我有这个,但我没有得到我期望的结果。希望有人能帮忙 我有两个实体Person和Timesheet,一个属性对应多个关系: Person.timesheet>timesheet.user。 下面的代码可以工作,但当我尝试添加第二个时间表条目时,它似乎覆盖了第一个 我看过苹果的文档,它们在这个问题上有点模糊 //Add NSManagedObjectContext *context = self.managedObjectContext; Person *personAdded = [

好的,我以为我有这个,但我没有得到我期望的结果。希望有人能帮忙

我有两个实体Person和Timesheet,一个属性对应多个关系: Person.timesheet>timesheet.user。 下面的代码可以工作,但当我尝试添加第二个时间表条目时,它似乎覆盖了第一个

我看过苹果的文档,它们在这个问题上有点模糊

//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键,而不是实际的表?或者可能是我没有正确地调用结果

谢谢,
Darren

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

[personAdded addTimesheet:timesheetSet];
哪个为您创建链接

核心数据通常为您定义的任何关系生成一个add和remove方法


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

嘿,谢谢。我一直认为这些方法可能是答案,但我一直无法让它们发挥作用。在阅读了您的回复之后,我又看了一眼,意识到我必须将这些方法添加到头文件中。一旦我这样做了,我就可以调用它,但当我调用它时,我得到一个警告,说明“NSSet”可能不会响应“addTimesheet:”。我已经看了代码的其余部分,看起来一切都很好?任何想法都很好现在错误是我的错误试图在personAdded.timesheet上运行该方法,而不仅仅是personAdded.timesheet。非常感谢您的解决方案,我很高兴它是如此简单。