应用程序无法及时启动

时间:2010-10-11 18:19:29

标签: iphone objective-c xcode debugging ios4

如何诊断此错误?

Application Specific Information:
    MyApp failed to launch in time

    Elapsed total CPU time (seconds): 4913.443 (user 3868.270, system 1045.173), 56% CPU 
    Elapsed application CPU time (seconds): 0.010, 0% CPU

    Backtrace not available

    Unknown thread crashed with unknown flavor: 5, state_count: 1

    Binary Images:
    0x2fe00000 - 0x2fe26fff  dyld armv7  <a11905c8ef7906bf4b8910fc551f9dbb> /usr/lib/dyld

以下是我的didFinishLaunching方法:

#pragma mark -
#pragma mark Application lifecycle

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

        if(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled")) 
        {
            NSLog(@"NSZombieEnabled/NSAutoreleaseFreedObjectCheckEnabled enabled!");
        }

        // Override point for customization after application launch.
        [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil];

        //Check for connectivity
        internetReach = [[Reachability reachabilityForInternetConnection] retain];
        [internetReach startNotifer];
        [self updateInterfaceWithReachability: internetReach];

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

        return YES;
    }

3 个答案:

答案 0 :(得分:28)

您可能在AppDelegate的应用程序:didFinishLaunching 方法中进行了大量的设置工作。

您应该确保此功能尽快退出。任何需要时间的设置工作(例如网络访问)都应该在应用程序中异步完成。在这种情况下,您可以显示一个微调器来向用户指示应用程序正在加载。

答案 1 :(得分:5)

为了向Philippe Leybaert的回复添加这样的信息 如果应用程序需要花费很多时间来启动主线程将被杀死,因此应用程序将崩溃。

  • 当您使用模拟器时,不会崩溃
  • 当您使用连接到xcode 的iphone时,它不会崩溃
  • 当您将其发送到App Store时,如果Apple测试人员使用的是快速iPhone,可能会被接受
  • 当你的用户像iPhone 3S 那样慢慢崩溃时

在提交之前测试此问题的方法是部署到 testflight或使用adhoc ,并将其安装在您要支持的较慢设备上。

答案 2 :(得分:1)

试着将你的应用程序:didFinishLaunchingWithOptions:方法代码划分到不同的函数调用,并使用除main之外的线程在后台进行调用,并确保application:didFinishLaunchingWithOptions:method尽快返回

你可以使用

dispatch_async(dispatch_get_main_queue(), ^{
//put your code
}

我已使用此代码解决了该问题!