飞溅屏幕崩溃,iPhone

时间:2009-11-22 23:08:08

标签: iphone objective-c crash sleep splash-screen

我有一个应用程序,打开时会显示启动/加载屏幕。我在应用程序开始前的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/

非常感谢,

斯图

7 个答案:

答案 0 :(得分:5)

我在这里纯粹猜测,但可能是因为你正在阻止主线程(使用睡眠而不是计时器),iPhone操作系统将其视为“无响应的应用程序”并将其杀死。 / p>

查看NSTimer。

答案 1 :(得分:4)

我同意Joshua Nozzi,操作系统“认为”你的应用程序崩溃了。

我将删除sleep()并改为执行此操作:

[window performSelector:@selector(addSubview:) withObject:viewController.view afterDelay:60.0f];
[window performSelector:@selector(makeKeyAndVisible) withObject:nil afterDelay:60.0f];

答案 2 :(得分:3)

如果您查看控制台,您可能会看到以下内容......

  

警告:您的应用程序名称无法及时启动

     

警告:强制申请名称的崩溃报告......

     

警告:已完成崩溃报告。

基本上,因为你让主线程长时间处于休眠状态,操作系统会判断应用程序无法启动并强制应用程序退出。您最好使用计时器来执行延迟,以便主线程保持活动状态。

答案 3 :(得分:0)

我建议你实施Splash屏幕逻辑的方式不同于当前残酷的屏幕逻辑:)

或许,你可以创建一个UIView覆盖整个屏幕,触摸后或超时后,自毁(removeFromSuperview)??

答案 4 :(得分:0)

嗯,从来没有一个充分的理由睡60秒的iPhone应用程序。决不。愿您的应用程序以当前形式永远不会到达App Store! :)

答案 5 :(得分:0)

查看此博客条目,其中介绍了如何创建将淡出的启动画面,并且您应该能够设置日志显示的延迟时间。查看创建计时器的位置。

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

答案 6 :(得分:0)

    [NSThread sleepForTimeInterval:0.85];

我想你可以使用这种方法。