Сбой в IOS 5 при отклонении модального вида - PullRequest
2 голосов
/ 25 октября 2011

Я сталкиваюсь с падением следующего оператора в IOS 5. Это работает в других версиях IOS.Сценарий состоит в том, что я представляю представление как модальное из viewController, а затем при нажатии на кнопку отмены я вызываю приведенный ниже код, чтобы отклонить self как модальное представление.Это прекрасно работает до сих пор.

Но через 30 секунд я перерисовываю свое представление, вызывая сервер для получения последних данных, и после того, как представление снова рисуется, когда я нажимаю на кнопку «Отмена», я получаю сбой - Только наIOS 5.0.Любая подсказка для этого?

[self dismissModalViewControllerAnimated:YES];

Ошибка:

Single stepping until exit from function -[UIWindowController transition:fromViewController:toViewController:target:didEndSelector:]

Это скриншот ошибки в трассировке потока:

enter image description here

Ответы [ 3 ]

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

попробуй

[[super presentingViewController] dismissModalViewControllerAnimated:YES];

1 голос
/ 27 апреля 2012

Если администратор позволяет мне добавить новый комментарий (мой последний был удален), я могу объяснить, что происходило в моем случае.

В этой ссылке есть что-то, что я понимаю, что делал неправильно.

Проблема возникает при представлении представления, однако происходит сбой приложения при его отклонении. Теперь, в чем проблема? В моем коде я представлял представление рядом с вызовом popToRootViewControllerAnimated :. Как вы можете видеть в ссылке, которую я только что вставил, iOS5, похоже, имеет некоторые ограничения при представлении модальных представлений. В качестве резюме ссылки, вы не можете сделать presentModalViewController: animated: before viewDidLoad и viewWillAppear: закончились:

Оказывается, руководящие принципы iOS не хотят, чтобы контроллеры представления модели были представлены в viewDidLoad или viewWillAppear

Это была моя вина. Что вы можете сделать, если это происходит с вами? Вы можете представить модальный вид после задержки. Итак, вместо использования этого:

[[self navigationController] popToRootViewControllerAnimated:NO];
[self presentModalViewController:loginNavController animated:YES];

Вы должны использовать это:

[[self navigationController] popToRootViewControllerAnimated:NO];
double delayInSeconds = 0.5;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    [self presentModalViewController:loginNavController animated:YES];;
});

(я полагаю, executeSelector: afterDelay: также работает) ...

и убедитесь, что delayInSeconds достаточно большой, чтобы завершить viewDidLoad и viewWillAppear. Извините, если это не очень точно и элегантно, но, по крайней мере, это работает.

С уважением.

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

Где-то еще есть ссылка на контроллер? Если нет, то вы освобождаете свой объект при увольнении, но вы все еще находитесь в одном из его методов.

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