Допустим, в моей модели данных есть две сущности: отдел и человек. Отделы имеют отношение «ко многим», называемое «отделом к человеку» с человеком. У Person есть однозначная связь под названием «personToDepartment» с отделом.
Я хочу заполнить массив людей, принадлежащих к выбранному отделу. Чтобы выбрать отдел, я создал UILabel, который отображает имя отдела, выбранное из всплывающего табличного представления. Когда я запускаю приложение, журнал показывает:
personToDepartment.departmentName == (entity: Department; id: 0x8cc1920; data: {departmentName = Marketing; DepartmentToPerson = "";
Я прочитал цель ошибок и реализовал setRelationshipKeyPathsForPrefetching, но все равно получаю ошибку. Я добавлю отказ от ответственности, что я новичок и могу упустить что-то очевидное. Когда я удаляю предикат, мое табличное представление заполняется всеми именами людей. Вот код:
- (NSFetchedResultsController *)fetchedResultsController {
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Person" inManagedObjectContext:_managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"personToDepartment.departmentName = %@", selectedDepartment];
NSLog(@"predicate is: %@",predicate);
[fetchRequest setPredicate:predicate];
[fetchRequest setRelationshipKeyPathsForPrefetching:[NSArray arrayWithObjects: @"departmentToPerson", nil]];
fetchRequest.returnsObjectsAsFaults = NO;
NSSortDescriptor *sort = [[NSSortDescriptor alloc]
initWithKey:@"personName" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
[fetchRequest setFetchBatchSize:20];
NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:_managedObjectContext sectionNameKeyPath:nil
cacheName:nil];
self.fetchedResultsController = theFetchedResultsController;
_fetchedResultsController.delegate = self;
return _fetchedResultsController;
}
Опять же, я выбираю новый отдел из UILabel, в журнале отображается selectedDepartment, но затем указывается ошибка связи и таблица не заполняется.
Заранее спасибо за помощь!
Обновлено 9 ИЮНЯ
Я также нашел это работает:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"personToDepartment = %@", selectedDepartment];