переключение между viewControllers - PullRequest
0 голосов
/ 25 октября 2011

Я использовал этот метод в нескольких приложениях, которые продаются в магазине приложений, но по какой-то причине текущее приложение, над которым я работаю, сводит меня с ума ... Должно быть, я что-то упускаю.

Основной вид приложения. Контроллер .h файл:

#import "MainMenuController.h"
#import "GamePlay.h"

@interface ProjectNameiPhoneViewController : UIViewController <MenuDelegate, GameDelegate> {
      UIViewController *currentPageController;
}

Приложение запускается и загружает контроллер MainMenu view:

UIViewController *nextController = [[MainMenuController alloc] initWithNibName:@"MainMenuController" bundle:nil];
[nextController performSelector:@selector(setDelegate:) withObject:self];

[self.view addSubview:nextController.view];

currentPageController = nextController;
[currentPageController retain];
[nextController release];

Из MainMenuController.m пользователь выбирает запуск игры:

[delegate startGameplay:self];

Назад в главном окне приложения. Контроллер:

- (void)startGameplay:(MainMenuController *)sender {

    UIViewController *nextController = [[GamePlay alloc] initWithNibName:@"GamePlay" bundle:nil];

    [nextController performSelector:@selector(setDelegate:) withObject:self];

    [currentPageController.view removeFromSuperview];
    [self.view addSubview:nextController.view];

    [currentPageController release];
    currentPageController = nextController;
    [currentPageController retain];
    [nextController release];
}

На экране игрового процесса пользователь нажимает кнопку «Назад», чтобы вернуться в главное меню:

- (IBAction)backTapped {
    [delegate backToMenu:self];
}

Вернуться в главное окно приложения. Контроллер:

- (void)backToMenu:(GamePlay *)sender {

    UIViewController *nextController = [[MainMenuController alloc] initWithNibName:@"MainMenuController" bundle:nil];

    [nextController performSelector:@selector(setDelegate:) withObject:self];

    [currentPageController.view removeFromSuperview];
        [self.view addSubview:nextController.view];

    [currentPageController release];
    currentPageController = nextController;
    [currentPageController retain];
    [nextController release];   
}

Я снова выбираю запуск игры из главного меню.

Класс GamePlay / Nib загружается, и я снова нажимаю кнопку «Назад», чтобы вернуться в главное меню.

В этот момент приложение вылетает, информация не выводится на консоль.

Любые идеи будут с благодарностью приняты - я прокомментировал почти все остальное в своем коде до такой степени, что это переключение между viewControllers является практически единственным выполняемым кодом, и я не знаю, почему он падает. ..

Большое спасибо заранее за вашу помощь!

Ответы [ 2 ]

1 голос
/ 25 октября 2011

Вполне вероятно, что вы хотите использовать MainMenuController в качестве rootViewController для keyWindow вашего приложения.

Кроме того, представления UIViewController не следует добавлять к другим представлениям UIViewController, поскольку это разрывает цепочку респондента, а в iOS 5.0 это приведет кбросить исключение.Если вы решите реализовать его только как приложение iOS 5.0, тогда я рекомендую взглянуть на [UIViewController -addChildViewController:] и [UIViewController -removeChildViewController:]

. Говоря так, лучшим решением, если это возможно, было бы использование MainMenuController какrootViewController, как указано выше, а затем вызвать [UIViewController -presentModalViewController:animated:] в вашем методе startGameplay и использовать делегата для отклонения модального контроллера представления

0 голосов
/ 31 октября 2011

Это не похоже на истинное разрешение, но приложение вылетает, только когда я запускаю его через «сборку и запуск» Xcode.Если я открою приложение, щелкнув значок на самом устройстве, приложение будет работать отлично.Я могу играть в течение долгого времени и нажимать кнопки, чтобы переключаться между контроллерами представления очень быстро, и это не дает сбоя.Поэтому я собираюсь отправить его в App Store, даже если он каждый раз вылетает без сообщения об ошибке при запуске через XCode - он абсолютно не вылетает на самом устройстве.

Самая странная часть о сбое, когдаЗапуск через XCode заключается в следующем: приложение падает на устройстве, выходя на домашний экран.Тем не менее, Xcode по-прежнему показывает приложение как «Работает», и у меня есть возможность нажать «Стоп» - оно не отображается серым цветом.Как я уже сказал, сообщение об ошибке не выводится на консоль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...