Произвольное переключение между View Controllers - сбой программы - PullRequest
0 голосов
/ 21 ноября 2011

Я не знаю много о программировании, но я все еще пытался создать программу, которая, например, Вы находитесь в View Controller 1, нажимаете кнопку, и она переводит вас в случайно выбранный View Controller, скажем, View Controller 3, а в View Controller 3 вы можете нажать другую кнопку, которая переводит вас в другой случайно выбранный View Controller, например, View Контроллер 2 и тд ..

Это работает, но я, очевидно, сделал что-то не так, потому что программа вылетает после 3 или менее раз, когда я нажимаю кнопку.

Вот код действия для нажатой кнопки:

- (IBAction)next { 
// Get random value between 1 and 3
int y = (arc4random()%3)+1;

if (y == 1){
    [navigationController pushViewController:viewController animated:YES];
}
else if (y == 2){
    [navigationController pushViewController:viewController2 animated:YES];
}
else 
    [navigationController pushViewController:viewController3 animated:YES];

}

Кстати, все, что связано с "y" и arc4random, используется ТОЛЬКО в этой части.

Может кто-нибудь сказать мне, почему он падает, пожалуйста? (Я начинающий, как я уже говорил) Спасибо!

Ответы [ 2 ]

0 голосов
/ 21 ноября 2011

Я НЕ УВЕРЕН В ЭТОМ, НО ЭТО МОЖЕТ БЫТЬ ПРИЧИНОЙ, ПОЖАЛУЙСТА, ПОПРОБУЙТЕ ОДИН РАЗ:

Может быть, если вы нажмете на viewcontroller один раз, вы не сможете нажать его снова, пока не выскочит его, потому что онуже в стеке.Так что вам может потребоваться небольшая модификация кода.

if (y == 1){
   if(isVC1Pushed == NO)

{

    [navigationController pushViewController:viewController animated:YES];
isVC1Pushed = YES
}
else{
[navigationController popToViewController:viewController animated:YES];
isVC1Pushed = NO;}

}
    }

Инициализировать логическое значение как НЕТ.Сделайте то же самое для других контроллеров представления.

0 голосов
/ 21 ноября 2011

Документация Apple (http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html) говорит о pushViewController

Важно: в iOS 2.2 и более поздних версиях, если объект в viewController параметр уже находится в стеке навигации, этот метод выдает исключение. В более ранних версиях iOS метод просто ничего не делает.

Это ситуация, в которой вы находитесь, и вы пытаетесь выдвинуть контроллер, который уже находится в стеке.

Вас интересует метод

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated

Сделайте это:

[navigationController setViewControllers:[NSArray arrayWithObject: ... ]];

Вместо ... поставьте свой UIViewController

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