Сбой в доступе API - PullRequest
       42

Сбой в доступе API

4 голосов
/ 23 декабря 2010

Я использую образец кода Reachability, предоставленный Apple, для проверки сетевого подключения и получения уведомлений об изменениях ( Пример кода Reachability ).

Я посмотрел на некоторые краш-замки моего приложения. Кажется, что некоторые сбои происходят из-за API Reachability / SystemConfiguration Reachablity (см. Ниже). SCNetworkReachabilityGetFlags используется только в классе Reachability, предоставленном Apple. Или я неправильно интерпретирую журнал сбоев?

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread:  0

Thread 0 Crashed:
0   libSystem.B.dylib              0x00000e70 mach_msg_trap + 20
1   libSystem.B.dylib              0x00003354 mach_msg + 60
2   SystemConfiguration            0x0001f480 configopen + 168
3   SystemConfiguration            0x00004d08 SCDynamicStoreCreateWithOptions + 272
4   SystemConfiguration            0x00004e54 SCDynamicStoreCreate + 24
5   SystemConfiguration            0x00015244 updateReachabilityStoreInfo + 152
6   SystemConfiguration            0x00016f04 updateCommCenterStatus + 32
7   SystemConfiguration            0x00017678 checkAddress + 1368
8   SystemConfiguration            0x0001a260 __SCNetworkReachabilityGetFlags + 1992
9   SystemConfiguration            0x0001b00c rlsPerform + 132
10  CoreFoundation                 0x00058266 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 8
11  CoreFoundation                 0x00028692 __CFRunLoopDoSources0 + 214
12  CoreFoundation                 0x00027f62 __CFRunLoopRun + 258
13  CoreFoundation                 0x00027d74 CFRunLoopRunSpecific + 220
14  CoreFoundation                 0x00027c82 CFRunLoopRunInMode + 54
15  GraphicsServices               0x00004e84 GSEventRunModal + 188
16  UIKit                          0x00004f8c -[UIApplication _run] + 564
17  UIKit                          0x000024cc UIApplicationMain + 964
18  MyApp                          0x0000f80c main (main.m:21)
19  MyApp                          0x0000f77c start + 44

Ответы [ 4 ]

3 голосов
/ 23 декабря 2010

Я нашел, что лучше просто попытаться открыть сетевое соединение.Затем, если это не удается, установите флаг, чтобы попробовать последнее и избежать «достижимости».Даже если при запуске проходит «достижимость», она может появиться и исчезнуть в любое время.

0 голосов
/ 10 декабря 2012

Используйте его в первом контроллере представления. Легко попасть в беду, если использовать его в модальном представлении или в других производных представлениях.

0 голосов
/ 23 декабря 2010

просто закомментируйте следующую строку в Reachability.m, если она там есть.

 [super init];
0 голосов
/ 23 декабря 2010

Достижимость - один из худших примеров кода Apple.

Хотя он хорошо уведомляет о сетевых подключениях, он довольно плохо [читай: безнадежно] показывает, доступен ли хост.

Вы также можете напрямую пропинговать хост и обнаружить ошибку по таймауту.

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