我有一个类似于此的核心数据模型:
我有一个根视图控制器,它在表视图中列出了公司。然后选择一行将所选公司的索引推送到另一个视图控制器,该控制器在表中列出Employee。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)ip
{
EmployeeListViewController *anotherViewController = [[EmployeeListViewController alloc] init];
[anotherViewController setCompany:[companyList objectAtIndex:[ip row]]];
[[self navigationController] pushViewController:anotherViewController animated:YES];
[anotherViewController release];
}
在Employee视图控制器中,公司设置为NSManagedObject。
- (void)setCompany:(NSManagedObject *)co
{
[co retain];
[company release];
company = co;
[self setTitle:[company valueForKey:@"companyName"]];
}
我添加新员工的代码如下所示:
employee = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:moc];
[[company mutableSetValueForKey:@"employee"] addObject:employee];
[employee setValue:employeeID forKey:@"employeeID"];
这看起来正确插入数据库,我可以看到公司的外键ID插入到Employee表中。
我正在尝试取一家公司的所有员工,但我已经陷入困境。
这是我对NSFetchRequest所拥有的,但它只是给了我所有的员工(不是公司):
NSManagedObjectContext *moc = [self managedObjectContext];
NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
[fetch setEntity:[NSEntityDescription entityForName:@"Employee" inManagedObjectContext:moc]];
[fetch setEntity:entity];
NSError *error = nil;
NSArray *results = [moc executeFetchRequest:fetch error:&error];
[fetch release];
答案 0 :(得分:1)
如果为实体生成类,则可以简单地处理。在XCode中编辑模型时,单击Cmd-N以创建新文件。选择左侧的iOS Cocoa Touch Class,然后选择右侧的Managed Object Class。点击Next,Next,Next,将为您生成代表您的实体的类文件。
这些类很金,因为它们可以帮助您管理对象之间的所有连接。在您的模型中,如果您定义从公司到员工的多对多关系并将其称为员工,那么您的公司类将具有employees属性,该属性是与该特定公司关联的所有员工的NSSet。这是梦幻般的。
您的创作代码看起来更像是:
Employee *employee = (Employee*)[NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:moc];
employee.employeeID = employeeID;
[company addEmployeesObject:employee];
然后,要获得与贵公司关联的员工列表,就这么简单:
for(Employee *employee in company.employees) {
// Do something with the employee
}