2011-04-17 118 views
0

好吧,我以为我有这个,但我没有得到我期待的结果。希望有人能帮助。核心数据关系获取

我有两个实体人和时间表与一个属性对多关系: 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"]); 

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

感谢, 达伦

回答

0

你应该在你Person.h文件生成的“CoreDataGeneratedAccessors”的方法,让你的方法

[personAdded addTimesheet:timesheetSet]; 

这会创建的链接?

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

如果不清楚,请发送您的person.h文件。

+0

嘿,谢谢你。我认为这些方法可能是答案,但我从来没有能够让他们工作。在阅读你的回应之后,我再看看它,并意识到我必须将这些方法添加到头文件中。一旦我这样做了,我可以称它为工作,但当我打电话时,我收到一个警告,指出'NSSet'可能不会响应'addTimesheet:'。我已经看了其余的代码,它看起来都很好?任何想法 – EcksMedia 2011-04-18 03:52:04

+0

现在它的一切都很好,错误是我的错,试图在personAdded.timesheet上运行该方法,而不仅仅是人员添加。非常感谢解决方案,我很高兴它是如此简单。 – EcksMedia 2011-04-18 04:15:04