я столкнулся с очень странным сбоем в разработке моего приложения для 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