Показывать MBProgressHUD на заставке приложения iPhone, пока Core Data Store переходит на новую версию?

#ios #iphone #splash-screen #mbprogresshud

#iOS #iPhone #заставка #mbprogresshud

Вопрос:

Если моему приложению для iPhone необходимо обновить базу данных Core Data, я хотел бы показать пользователям представление MBProgressHUD во время загрузки моего приложения для iPhone, чтобы они знали, что оно работает, а не зависает. Как я могу добавить MBProgressHUD на заставку во время миграции хранилища данных? Обычно я бы прикрепил его к представлению UIViewController, но заставка находится под делегатом приложения. Возможно ли это сделать?

Ответ №1:

Нет, невозможно наложить что-либо поверх заставки, поскольку она статична.

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

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

1. Есть ли лучшая практика для того, как это сделать?

2. Я не могу сообщить подробности, поскольку я не делал этого раньше. Однако я бы просто предположил, что вам следует сделать то, что сказал Алекс ниже, а именно дождаться вызова -applicationDidFinishLaunching: и в этом методе (он в вашем делегате) создать контроллер представления и отобразить его как модальное представление, затем запустить фоновый поток. Как только это будет завершено, сделайте так, чтобы он отправлял обратный вызов вашему делегату, и в этом методе делегирования удалите представление загрузки. Итак, по сути, вы просто добавляете представление в свой метод делегирования и отклоняете его, когда фоновый процесс завершен.

Ответ №2:

Вы могли бы создать #define макрос в заголовочном файле делегата вашего приложения (или в заголовке «глобальные»), например:

 #define MyAppDelegate [[UIApplication sharedApplication] delegate]
  

Затем, когда вы захотите получить доступ к свойству делегирования приложения, вы можете сделать это следующим образом в любом месте вашего приложения, куда вы импортировали этот заголовок (или заголовок globals):

 MyAppDelegate.property = foo;
[[MyAppDelegate property] bar];
  

Это может помочь вам управлять просмотром прогресса на любом этапе работы приложения.

Редактировать

sudo rm -rf верно, что вы не можете выполнять работу во время заставки. Но вы можете запустить просмотр хода выполнения в -applicationDidFinishLaunching: методе делегата приложения, а затем запустить работу в фоновом потоке. Как только работа вашего фонового потока будет завершена, при обратном вызове отключите просмотр хода выполнения.