我有一个与此类似的核心数据模型:
- 公司实体
- companyName 属性(字符串)
- 与 Employee 实体的多对多关系。
- 员工实体
- employeeID 属性(字符串)
- 与母公司实体的一对一关系
我有一个根视图控制器,它在表格视图中列出了公司。然后选择一行将所选公司的索引推送到另一个视图控制器,该控制器在表中列出员工的。
- (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"];
这看起来正确插入了数据库,我可以看到 Company 的外键 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];