Я новичок в основных данных, и мне нужна помощь в решении следующей проблемы:
У меня есть две сущности: Talk и Speaker. У них отношения ко многим.
Talk - назначение: динамик, инверсия: Talk Speaker - назначение: Talk, инверсия: динамик
Поле «Отношение ко многим» проверяется на обоих объектах.
У меня есть контроллер табличного представления, чтобы перечислить все доступные разговоры. Вот как я делаю:
- (NSFetchedResultsController *)fetchedResultsController
{
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Talk" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSSortDescriptor *sort = [[NSSortDescriptor alloc]
initWithKey:@"date" ascending:NO];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
[fetchRequest setFetchBatchSize:20];
NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil
cacheName:@"Root"];
self.fetchedResultsController = theFetchedResultsController;
_fetchedResultsController.delegate = self;
return _fetchedResultsController;
}
Когда я нажимаю на ячейку, я хочу загрузить другой контроллер представления, показывающий только детали выбранного разговора.
Вот что я делаю:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
TalksDetailsViewController *talksDetails = [[TalksDetailsViewController alloc] initWithTalksInfo:[_fetchedResultsController objectAtIndexPath:indexPath]];
[self.navigationController pushViewController:talksDetails animated:YES];
}
Проблема в том, что я не вижу выступающих на TalksDetailsViewController. Это информация, отправленная в TalksDetailsViewController:
Info: <Talk: 0x6e66920> (entity: Talk; id: 0x6e66880 <x-coredata://4063FE84-E6DB-4588-8133-9A55B512D6C8/Talk/p2> ; data: {
date = "2012-08-31 03:00:00 +0000";
id = 7;
speaker = "<relationship fault: 0x6e994e0 'speaker'>";
"start_time" = "17:14:55";
})
Я пробовал что-то вроде кода ниже, но это не сработало:
for (Speaker *speakerInfo in self.talkInfo.speaker) {
NSLog(@"speaker info: %@", speakerInfo);
}
Он никогда не попадает в for.
Если я попытаюсь зарегистрировать self.talkInfo.speaker, я получу что-то вроде:
Relationship 'speaker' fault on managed object (0x7a76c30) <Talk: 0x7a76c30> (entity: Talk; id: 0x7a76b90 <x-coredata://4063FE84-E6DB-4588-8133-9A55B512D6C8/Talk/p2> ; data: {
date = "2012-08-31 03:00:00 +0000";
id = 7;
speaker = "<relationship fault: 0x6bc5990 'speaker'>";
"start_time" = "17:14:55";
})
Я видел несколько похожих вопросов, но не смог решить свою проблему.
Какие-нибудь советы?