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而不是实际的表?或者可能是因为我没有正确地调用结果?
感谢, 达伦
嘿,谢谢你。我认为这些方法可能是答案,但我从来没有能够让他们工作。在阅读你的回应之后,我再看看它,并意识到我必须将这些方法添加到头文件中。一旦我这样做了,我可以称它为工作,但当我打电话时,我收到一个警告,指出'NSSet'可能不会响应'addTimesheet:'。我已经看了其余的代码,它看起来都很好?任何想法 – EcksMedia 2011-04-18 03:52:04
现在它的一切都很好,错误是我的错,试图在personAdded.timesheet上运行该方法,而不仅仅是人员添加。非常感谢解决方案,我很高兴它是如此简单。 – EcksMedia 2011-04-18 04:15:04