Приложение не удалось запустить вовремя - PullRequest
10 голосов
/ 11 октября 2010

Как я могу диагностировать эту ошибку?

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 ]

28 голосов
/ 11 октября 2010

Вы, вероятно, выполняете большую работу по настройке в приложении вашего AppDelegate: метод didFinishLaunching .

Вы должны убедиться, что эта функция завершается как можно скорее. Любая работа по настройке, которая требует времени (например, доступ к сети), должна выполняться асинхронно в вашем приложении. Пока это происходит, вы можете показать счетчик, чтобы указать пользователю, что приложение загружается.

5 голосов
/ 22 мая 2013

Для того, чтобы добавить такую ​​информацию в ответ Филиппа Лейберта.Если запуск приложения занимает много времени, основной поток будет уничтожен, поэтому приложение будет аварийно завершено.

  • При использовании симулятора не произойдет сбой .
  • Когда вы используете свой iphone, подключенный к xcode , он не будет зависать .
  • Когда вы отправляете его в App Store, может быть принят , еслитестер Apple использует быстрый iPhone
  • Когда ваши пользователи на медленном компьютере, например iPhone 3S , аварийно завершат работу

Способ проверки этой проблемы перед отправкой - развертываниена testflight или с adhoc и установите его на более медленное устройство, которое вы хотите поддерживать.

1 голос
/ 10 октября 2013

Просто попробуйте разделить ваше приложение: didFinishLaunchingWithOptions: код метода на различные вызовы функций и сделать эти вызовы в фоновом режиме, используя потоки, отличные от main, и убедитесь, что application: didFinishLaunchingWithOptions: метод возвращается как можно скорее

Вы можете использовать

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

Я решил проблему с помощью этого кода!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...