Приложение не удалось запустить вовремя
Как я могу диагностировать эту ошибку?
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;
}
Ответы
Ответ 1
Вероятно, вы много работаете с настройками в приложении AppDelegate : метод didFinishLaunching.
Вы должны убедиться, что эта функция завершена как можно скорее. Любая работа по настройке, которая требует времени (например, доступ к сети), должна выполняться асинхронно в приложении. Пока это происходит, вы можете показать счетчик, чтобы указать пользователю, что приложение загружается.
Ответ 2
Чтобы добавить такую информацию в ответ Филиппа Лейбаерт.
Если приложение займет много времени, чтобы запустить основной поток, он будет убит, чтобы приложение сработало.
- Когда вы используете симулятор, он не будет разбиваться.
- Когда вы используете свой iphone, подключенный к xcode , он не будет разбиваться.
- Когда вы отправляете его в App Store, может быть принято, если тестер Apple использует быстрый iPhone
- Когда ваши пользователи на медленном, как iPhone 3S , выйдут из строя
Способ проверки этого выпуска перед отправкой заключается в развертывании в testflight или с adhoc и его установке на более медленном устройстве, которое вы хотите поддерживать.
Ответ 3
Просто попробуйте разделить ваше приложение: didFinishLaunchingWithOptions: введите код метода для разных вызовов функций и сделайте эти вызовы в фоновом режиме, используя потоки, отличные от основного, и убедитесь, что приложение: doneFinishLaunchingWithOptions: метод возвращает как можно скорее
вы можете использовать
dispatch_async(dispatch_get_main_queue(), ^{
//put your code
}
Я решил проблему с помощью этого кода!