Где я должен выполнить проверку доступности? - PullRequest
3 голосов
/ 17 октября 2010

Я хочу проверить правильность сетевого подключения. Я последовал примеру Apple Reachability и вставил свой чек в applicationDidFinishLaunching

#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;
    }

Однако мое приложение иногда падает с ошибкой Application Failed to Launch in Time

Я отправил свой сбой в виде SO-вопроса здесь: Приложение не удалось запустить за время

Я не уверен, где я должен выполнить проверку доступности?

Ответы [ 2 ]

3 голосов
/ 17 октября 2010

Проверка доступности может занять значительное время (30 секунд или более) в зависимости от условий сети. Но если пользовательский интерфейс вашего приложения не отвечает в течение некоторого количества секунд (намного меньше 30), ОС предполагает, что оно мертво, и убивает его.

Если вы выполните проверку Reachability в фоновом потоке, а не в потоке пользовательского интерфейса, ваш пользовательский интерфейс останется отзывчивым, и ни ОС, ни пользователь не будут считать, что ваше приложение заблокировано или произошло сбой.

0 голосов
/ 17 октября 2010

В -applicationDidBecomeActive вы можете вызвать метод в фоновом режиме , который использует код достижимости с -performSelectorInBackground:withObject:.

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