По сути, он не может найти файл .xib с именем «DetailView».Убедитесь, что в initWithNibName:
указано правильное имя строки для файла .xib
.
Важная часть этой ошибки:
Could not load NIB in bundle: 'NSBundle </.../Teste Data Nav.app> (loaded)' with name 'DetailView'
, что означает отсутствие .xibфайл в вашем комплекте называется DetailView
.Убедитесь, что вы используете правильное имя файла:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
ItemDetailsView *detailViewController = [[ItemDetailsView alloc] initWithNibName:@"ItemDetailsView" bundle:nil];
// ERROR HERE
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
}
Редактировать (из комментариев) подключить представление к File's Owner
следующим образом:
Убедитесь, что у self
есть navigationController
родитель.Если это главное представление, которое появляется при запуске приложения, вам нужно добавить UINavigationController к MainWindow.xib
и установить его rootViewController для контроллера представления с этой таблицей.
Вы можете проверить это, выполнив:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog("self.navController view controllers: %@", [[[self navigationController] viewControllers] description]);
// Or something like this:
if (self.parentViewController == self.navigationController) {
NSLog(@"I have a nav controller dad!");
} else {
NSLog(@"I have no nav controller!");
}
// ItemDetailsView *detailViewController = [[ItemDetailsView alloc] initWithNibName:@"DetailView" bundle:[NSBundle mainBundle]];
// ERROR HERE
// [self.navigationController pushViewController:detailViewController animated:YES];
// [detailViewController release];
}
Если NSLog распечатывает массив контроллеров представления, тогда есть другая проблема, но если он выдает ошибку на NSLog
или распечатывает пустой массив, тогда ваш self
не имеет navigationController
родителя.