如何诊断此错误?
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;
}
答案 0 :(得分:28)
您可能在AppDelegate的应用程序:didFinishLaunching 方法中进行了大量的设置工作。
您应该确保此功能尽快退出。任何需要时间的设置工作(例如网络访问)都应该在应用程序中异步完成。在这种情况下,您可以显示一个微调器来向用户指示应用程序正在加载。
答案 1 :(得分:5)
为了向Philippe Leybaert的回复添加这样的信息 如果应用程序需要花费很多时间来启动主线程将被杀死,因此应用程序将崩溃。
在提交之前测试此问题的方法是部署到 testflight或使用adhoc ,并将其安装在您要支持的较慢设备上。
答案 2 :(得分:1)
试着将你的应用程序:didFinishLaunchingWithOptions:方法代码划分到不同的函数调用,并使用除main之外的线程在后台进行调用,并确保application:didFinishLaunchingWithOptions:method尽快返回
你可以使用
dispatch_async(dispatch_get_main_queue(), ^{
//put your code
}
我已使用此代码解决了该问题!