如何解决核心数据关系提取
| 好的,我以为我有这个功能,但是我没有得到预期的结果。希望有人可以提供帮助。 我有两个实体Person和Timesheet,其中一个属性具有多对多关系: Person.timesheet <--- >>时间表用户。 下面的代码有效,但是当我尝试添加第二个时间表条目时,它似乎覆盖了第一个? 我看过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而不是实际的Table来设置Person.timesheet键?还是我没有正确调用结果?
谢谢,
达伦
解决方法
您的Person.h文件中应该具有一个生成的\“ CoreDataGeneratedAccessors \”方法,该方法可以为您提供一个方法
[personAdded addTimesheet:timesheetSet];
哪个为您创建链接?
通常,Core Data会为您定义的任何关系生成添加和删除方法。
如果不清楚,请发布您的person.h文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。