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.После освобождения нажмите на соответствующую запись:

Другие вопросы по тегам