К сожалению, я застрял с основными данными. Я построил отношения 1: M, скажем, Компания и Сотрудники.
Я создаю компанию, затем я создаю сотрудника:
Employees *employee = (Employees *)[NSEntityDescription insertNewObjectForEntityForName:@"Employees" inManagedObjectContext:myObjectContext];
employee.name = employeeName;
employee.company = company;
NSError *error = nil;
if (![myObjectContext save:&error])
{
// Handle the error.
NSLog(@"error: %@", error.description);
}
Если я проанализирую файл sql, то увижу, что столбец «Родитель» для записи «Сотрудники» правильно заполнен идентификатором компании.
Теперь я хотел бы выбрать компанию в своем табличном представлении и показать ее сотрудников в другом табличном представлении. Я реализую NSFetchedResultsController
следующим образом:
- (NSFetchedResultsController *)fetchedResultsController
{
if (fetchedResultsController != nil)
{
return fetchedResultsController;
}
//retrieve context
if (myObjectContext == nil)
{
id appDelegate = (id)[[UIApplication sharedApplication] delegate];
self.myObjectContext = [appDelegate managedObjectContext];
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Employees" inManagedObjectContext:myObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setFetchBatchSize:20];
NSFetchedResultsController *myFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:myObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
self.fetchedResultsController = myFetchedResultsController;
fetchedResultsController.delegate = self;
return fetchedResultsController;
}
и я вызываю его в viewDidAppear:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSError *error = nil;
//call the fetch
if (![[self fetchedResultsController] performFetch:&error])
{
NSLog(@"Error with fetchedResultsController: %@, %@", error, [error userInfo]);
exit(-1);
}
[self.tableView reloadData];
}
Проблема в том, что отображаются все сотрудники, а не только сотрудники выбранной компании.
Есть идеи?