UINavigationController - Приложение пыталось выдвинуть ноль контроллера вида на цель, что мне не хватает?
У меня проблемы с настройкой моего контроллера навигации для правильной работы! Если я щелкну в ячейке таблицы в RootViewController, то появится не следующий ViewController.
Сообщение об ошибке читает
"Приложение пыталось выдвинуть ноль контроллера вида на цель".
Так что я ошибся, предположил, я упустил что-то важное из книги, которой я следую.
Таким образом, проблема появляется здесь в моем RootViewController.m:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
UINavigationController *navigationController= [[UINavigationController alloc]init];
switch ([indexPath row]) {
case 0:
[navigationController pushViewController:kundeViewCon animated:YES];
break;
case 1:
[navigationController pushViewController:kalenderViewCon animated:YES];
break;
case 2:
[navigationController pushViewController:wunschViewCon animated:YES];
break;
}
}
В моем AppDelegate.m я делаю следующие вещи, чтобы установить RootViewController в качестве NavigationController:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
// Navigation Controller
RootViewController *rootViewController = [[RootViewController alloc]init];
navigationController = [[UINavigationController alloc]initWithRootViewController:rootViewController];
self.window.backgroundColor = [UIColor whiteColor];
[self.window addSubview:navigationController.view];
[self.window makeKeyAndVisible];
return YES;
}
Итак, я получил все мои другие ViewControllers, которые я хочу нажать, когда я нажимаю в ячейке. Я просто не вижу своей вины или чего мне не хватает!?
Может быть, кто-то может помочь мне и дать мне подсказку! Это было бы прекрасно!
3 ответа
RootViewController
уже есть свой контроллер навигации - вы создали его в делегате приложения. Создание нового контроллера навигации при выборе ячейки не имеет смысла. Вероятно, это должно выглядеть примерно так:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
switch ([indexPath row]) {
case 0:
[self.navigationController pushViewController:kundeViewCon animated:YES];
break;
case 1:
[self.navigationController pushViewController:kalenderViewCon animated:YES];
break;
case 2:
[self.navigationController pushViewController:wunschViewCon animated:YES];
break;
}
}
Кроме того, просто убедитесь, что при звонке -pushViewController:animated:
контроллер вида (т.е. kundleViewCon
, kalenderViewCon
& wunschViewCon
) не ноль. Они выглядят как переменные экземпляра или свойства - просто убедитесь, что вы размещаете / запускаете их раньше в своем коде, как в -viewDidLoad
,
Вам не нужно создавать новый UINavigationController. Вы должны получить свой контроллер из текущего окна.
[self.navigationController pushViewController:yourController animated:YES];
где yourController - это один из ваших созданных экземпляров UIViewController (kundeViewCon, kalenderViewCon или wunschViewCon)
Для гуглеров:
Это также может произойти, если вы не подключили свой ViewController к:
"<Your Project> App Delegate"
Если вы этого не сделаете, ваш контроллер не будет инициализирован.
Вам также необходимо переименовать класс ViewController в соответствующий файл.h / .m:
Откройте файл xib -> выберите свой ViewController -> перейдите в "Инспектор идентификации" -> введите в текстовое поле "Класс" имя соответствующих файлов.h / .m.
Подключите ваш ViewController к приложению. Щелкните правой кнопкой мыши и перетащите из... AppDelegate на свой ViewController.После освобождения нажмите на соответствующую запись: