poptorootviewcontrollerанимирован в проблеме обратного вызова AlertView

#iphone #objective-c #ios

#iPhone #objective-c #iOS

Вопрос:

У меня в приложении есть процесс загрузки данных, который инициируется нажатием кнопки. Операция выполняется в фоновом потоке, поэтому пользователь может свободно переходить к другим представлениям и делать то, что ему нравится.

Когда загрузка завершится, пользователю будет показано предупреждение о том, что приложение необходимо перезагрузить. При нажатии OK запускается метод AlertView clickedButtonAtIndex. Внутри этого метода я вызываю popToRootViewControllerAnimated.

Если я не перешел к другим представлениям и остался в представлении, с которого пользователь инициировал загрузку, это работает!! Проблема в том, что если пользователь отошел от просмотра, инициированного загрузкой, и нажимает OK в предупреждении «перезагрузить приложение», ничего не происходит. Пользователь не перенаправляется обратно на корневой контроллер просмотра. Он просто остается на месте…

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

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

Спасибо за вашу помощь.

Обновить:

Вот запрошенный код:

 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex != 0) {
    //User indicated that they want to restart the app so that they can apply the update

    cameFrom = CAME_FROM_RESTART;

    [self.navigationController popToRootViewControllerAnimated:NO]; 


     }
  

Комментарии:

1. Все ли помещено под один навигационный контроллер? Корневой контроллер просмотра в любом случае является относительным к текущему.

2. Пожалуйста, опубликуйте код, в котором вы возвращаетесь к корню. Я подозреваю, что навигационный контроллер, который вы пытаетесь подключить к pop, равен нулю в контексте, в котором вы на него ссылаетесь.

3. Извините за двойной пост. Я обновил этот пост кодом.

4. Какой контроллер использует собственный alertView:clickedButtonAtIndex: метод? Если тот, который инициирует загрузку, то он, возможно, был выпущен к моменту завершения загрузки, если пользователь перешел к какому-либо из верхних (в стеке навигации) контроллеров.

5. Да, это тот, который инициирует dload. Я проверил в отладчике, что код действительно выполняется. Будет ли он по-прежнему выполняться, если он был выпущен … но просто не обновит представление? Я новичок в iOS, поэтому, пожалуйста, отнеситесь ко мне терпеливо.

Ответ №1:

Вы можете использовать setViewController:animated: вместо popToRootViewControllerAnimated. Когда последний у меня не сработал, я использую setViewController: animated: и работает. В последний раз, когда я использовал setViewController с анимированным ДА, он выдает ошибку. пересылка. Если это случится с вами, попробуйте с анимированным: НЕТ

Ответ №2:

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

Комментарии:

1. Я немного новичок в iOS. Не могли бы вы описать, как это можно сделать? Есть ли что-то в моем объекте оповещения, что мне нужно указать, что указывает ему перенаправлять обратный вызов моему делегату приложения?