У меня есть базовая модель данных, подобная этой:
- Компания
- атрибут companyName (строка)
- Отношение ко-многим к сущностям Сотрудника.
- Сотрудник
- атрибут 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"];
Это похоже на правильную вставку базы данных, и я вижу идентификатор внешнего ключа компании, вставленный в таблицу 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];