Достижимость вызывает сбой при отсутствии сетевой ситуации - как правильно использовать достижимость в асинхронном режиме

я столкнулся с очень странным сбоем в разработке моего приложения для iPhone. Казалось, что каждый раз, когда я показываю свое приложение другу, оно вылетает, но иначе никогда не вылетало. Будучи в целом озадаченным аспектом закона Мерфи, я определил схему аварий - метро Нью-Йорка. Мое приложение постоянно вылетает после того, как я пользуюсь метро. Я' Я проследил проблему до того, как я использовал Reachability . Приложение аварийно завершает работу в следующий раз после того, как оно будет использовано в отсутствии сети (не включая режим полета). Я следую рекомендациям Apple и проверяю соединение с Reachability , прежде чем выполнять какие-либо другие сетевые операции, но я нашел некоторую противоречивую документацию о том, как это вызвать.

В настоящее время я делаю это. что-то вроде этого:

-(BOOL)reachable {
    Reachability *r = [Reachability reachabilityWithHostName:@"www.stackoverflow.com"];
    NetworkStatus internetStatus = [r currentReachabilityStatus];
    if(internetStatus == NotReachable) {
        return NO;
    }
    return YES;

}

который я вызываю синхронно с методом, вызываемым из viewDidAppear.

    if ([self reachable]== YES) {
        ... do network stuff ...

, который основан на коде из Руководства по достижимости для iOS 4

Мой вопрос: существует ли правильное использование Reachability , которое устранит эту ошибку и устранит отсутствие сети 3G или Wi-Fi? Нужно ли мне создавать другой поток или делать что-то для удаления синхронного вызова?

Вот, кстати, журнал сбоев, который я вижу при сбое моего приложения, что наводит меня на мысль, что это проблема синхронная / асинхронная.


Application Specific Information:
(app name) failed to resume in time

Elapsed total CPU time (seconds): 3.280 (user 1.770, system 1.510), 33% CPU 
Elapsed application CPU time (seconds): 0.040, 0% CPU

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0:
0   libsystem_kernel.dylib          0x30747fbc kevent + 24
1   libsystem_info.dylib            0x30abec4e _mdns_search + 586
2   libsystem_info.dylib            0x30abfb72 mdns_addrinfo + 370
3   libsystem_info.dylib            0x30abfd68 search_addrinfo + 76
4   libsystem_info.dylib            0x30ac1bcc si_addrinfo + 1080
5   libsystem_info.dylib            0x30abd0b2 getaddrinfo + 78
6   SystemConfiguration             0x311b4256 __SCNetworkReachabilityGetFlags + 962
7   SystemConfiguration             0x311b4f1e SCNetworkReachabilityGetFlags + 98

7
задан Community 23 May 2017 в 12:13
поделиться