Это дополнительный вопрос к моему предыдущему вопросу:
Основные данные: Управление контрактами сотрудников в отношениях «многие ко многим»?
Естьдиаграмма по этому вопросу, и в качестве быстрого напоминания есть следующее:
company --< contracts >-- employees
Мне удалось вручную сохранить 1 сущность в каждой из сущностей и проверить их всев NSLog.
Я создал CompanyListPage, в котором перечислены все компании.Идея заключается в том, что при нажатии на компанию вам будет представлен список всех сотрудников, которые имеют контракт с указанной компанией.
В контексте см. Ниже:
Company:
name: A
Contract:
length: 33 wks
salary: 20000
Employee:
name: Bob Jones
В моемСтраница didSelectRowAtIndex в моей CompanyListPage У меня есть следующее.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
Company *c = [fetchedResultsController objectAtIndexPath:indexPath];
NSLog(@"You clicked %@", c.name);
NSString *companyName = c.name;
EmployeesListPage *employeesListPage = [[EmployeesListPage alloc] initWithNibName:@"EmployeesListPage" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:employeesListPage animated:YES];
employeesListPage.title = companyName;
employeesListPage.managedObjectContext = self.context;
employeesListPage.managedObject = c;
[superstarsList release];
}
Проблема, однако, заключается в том, что я не уверен, как должен выглядеть мой NSPredicate, когда я в конечном итоге захожу на employeeListPage.
Вмомент, это это:
- (NSFetchedResultsController *)fetchedResultsController
{
if (fetchedResultsController != nil) {
return fetchedResultsController;
}
// Create and configure a fetch request
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Employees" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
// Create the sort descriptors array
NSSortDescriptor *authorDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:authorDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
// Create and initialize the fetch results controller
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
self.fetchedResultsController = aFetchedResultsController;
fetchedResultsController.delegate = self;
// Memory management.
[aFetchedResultsController release];
[fetchRequest release];
[authorDescriptor release];
[sortDescriptors release];
return fetchedResultsController;
}
Очевидно, что это неправильно, потому что это не так:
a) Поиск в объекте контракта б) Использование объекта компании любым способом, в той или иной форме
Я знаю, что мне нужно использовать NSP-предикат, но я просто знаю, как заставить его сказать «Найдите мне всех сотрудников с контрактом> 0 и работающим с компанией А», затем закажите его по имени человекапо убыванию или даже упорядочите сначала по наименьшей длине контракта.
Любые указатели или помощь по этому вопросу были бы хорошими.Спасибо.
РЕДАКТИРОВАТЬ: Первая попытка (удалено, потому что я получил его на работу после ответа ниже)
РЕДАКТИРОВАТЬ: Не удалось получить информацию о контракте обратно?
Мне удалось вернуть всех сотрудников, которые работают в компании А, в мой контроллер табличного представления.
Однако я хочу отобразить в своей ячейке информацию о сотруднике и его контрактной длине / зарплате.
Я пробовал следующее:
Employee *emp = [fetchedResultsController objectAtIndexPath:indexPath];
NSString *firstname = emp.firstname;
NSString *surname = emp.surname;
NSString *fullname = [firstname stringByAppendingString:@" "];
fullname = [fullname stringByAppendingString:surname];
// Logging tests
NSLog(@"Name: %@", fullname); // This is fine
NSLog(@"Contracts: %@", emp.empContracts); // This tells me of a problem with "Relationship fault for <NSRelationshipDescription: 0x602fdd0>"
Iполагаю, что мне нужно получить NSPredicate для сбора всех данных контракта, а не только данных контракта;однако я могу ошибаться.
Опять же, помощь по этому вопросу будет принята с благодарностью.