Создание экрана загрузки / «оповещения» при передаче данных при инициализации приложения - PullRequest
0 голосов
/ 16 февраля 2012

Я копирую базу данных, которую я включаю в свой пакет, с моим приложением и переносу ее в каталог «Документы», чтобы сделать ее доступной для записи. Это занимает некоторое время, и у меня в настоящее время есть только заставка. Есть ли способ поставить предупреждение «Загрузка ...» или какой-нибудь индикатор активности (например, как это делает «Слова с друзьями» при загрузке ваших игр), чтобы дать пользователю некоторый контекст относительно того, что происходит в течение первых 20 секунд? в первый раз они открывают приложение? Я не знал, была ли у меня ссылка на этот экран, поскольку первый viewController, представленный из AppDelegate, еще не загружен. Спасибо.

1 Ответ

1 голос
/ 16 февраля 2012

При выполнении длительных задач при запуске приложения есть несколько соображений.

Приложение завершило запуск

Вы должны завершить - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions в течение определенного периода времени, который, как я считаю, составляет 20 секунд, в противном случае ваше приложение будет закрыто от сторожевого таймера

Примечание о сбоях WatchDog

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

Хотя это иногда осуждается Руководством Apple по человеческому интерфейсу

Избегайте отображения окна «О программе», заставки или предоставления каких-либо другой тип опыта запуска, который мешает людям использовать ваш заявление немедленно.

Руководство по интерфейсу пользователя iOS

Не блокируется

Вы также захотите выполнить все свое копирование в фоновом режиме с помощью GrandCentral Dispatch или используйте - (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg, чтобы предотвратить блокировку основного потока. Таким образом, вы можете представить UIActivityIndicatorView, который продолжает вращаться во время выполнения задачи.

Grand Central Dispatch

Grand Central Dispatch, вероятно, лучший способ справиться с этим. Вы можете выполнить свою задачу в фоновом режиме и обновить основной поток, например, UIProgressView в том же блоке, как этот

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        //Do something in background
        dispatch_async(dispatch_get_main_queue(), ^{
            //Update UI
        });
    });

По завершении удалите LoaderViewController [loaderViewController removeFromSuperview];, и ваше приложение перейдет к первому контроллеру. В это время вы также можете обновить пользовательский интерфейс для отображения обновленной информации.

Справочник по центральному отправлению

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