Сбой на заставке, iPhone

У меня есть приложение, которое при открытии отображает заставку/экран загрузки. Я установил это за 2,5 секунды до того, как приложение продолжило работу.

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{

sleep(2.5);


[window addSubview:viewController.view];
[window makeKeyAndVisible];

}

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

sleep(60.0);

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

Любая идея, почему это так?

Как мне это сделать?

Изменить // Стоит отметить оба:

sleep(15.0);

и

sleep(19.0);

Работа.

sleep(20.0);

не.

Решение // Не используйте спящий режим, используйте таймер. Я следил за учебником здесь:

http://adeem.me/blog/2009/06/22/creating-splash-screen-tutorial-for-iphone/

Большое спасибо,

Стью


person Stumf    schedule 22.11.2009    source источник
comment
разве в рекомендациях Apple не было чего-то о запрете использования заставок?   -  person fixmycode    schedule 23.11.2009


Ответы (7)


Я просто предполагаю, но может быть и так, поскольку вы блокируете основной поток (используя спящий режим вместо таймера), ОС iPhone видит это как «не отвечающее приложение» и убивает его.

Проверьте NSTimer.

person Joshua Nozzi    schedule 22.11.2009

Я согласен с Джошуа Ноцци в том, что ОС «думает», что ваше приложение потерпело крах.

Я бы удалил sleep() и сделал бы это вместо этого:

[window performSelector:@selector(addSubview:) withObject:viewController.view afterDelay:60.0f];
[window performSelector:@selector(makeKeyAndVisible) withObject:nil afterDelay:60.0f];
person Thomas Müller    schedule 23.11.2009

Если вы посмотрите в свою консоль, вы, вероятно, увидите что-то вроде следующего...

Предупреждение: ваше имя приложения не удалось вовремя запустить

Предупреждение: Принудительный отчет о сбое имени вашего приложения...

Предупреждение: отчет о сбоях завершен.

По сути, из-за того, что вы слишком долго усыпили основной поток, ОС решает, что приложение не удалось запустить, и принудительно завершает работу приложения. Вам лучше использовать таймер для задержки, чтобы основной поток оставался активным.

person Paul    schedule 22.11.2009

Я бы посоветовал вам реализовать логику экрана-заставки иначе, чем текущая жестокая :)

возможно, вы могли бы создать UIView, покрывающий весь экран, при касании или по истечении времени ожидания самоуничтожается (removeFromSuperview)??

person prakash    schedule 22.11.2009

Хм, никогда не бывает веских причин засыпать приложение для iPhone на 60-е годы. Никогда. Пусть ваше приложение в его нынешнем виде никогда не попадет в App Store! :)

person Jonathan Sterling    schedule 23.11.2009
comment
Это не цель моего приложения, я просто учусь и создаю это приложение для удовольствия, практики и развлечения. Спасибо за совет, возможно, в будущем мои приложения попадут в магазин приложений! - person Stumf; 23.11.2009
comment
Ох, хорошо. Удачи вам! - person Jonathan Sterling; 23.11.2009

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

http://icodeblog.com/2009/03/18/iphone-game-programming-tutorial-part-3-splash-screen/

person epatel    schedule 23.11.2009

    [NSThread sleepForTimeInterval:0.85];

Я думаю, что вы можете использовать этот метод.

person shilpa    schedule 23.11.2009