Я столкнулся с очень странным сбоем в работе моего приложения для 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 или Wifi?Нужно ли создавать другой поток или что-то делать, чтобы удалить синхронный вызов?
Здесь, между прочим, находится журнал сбоев, который я вижу при сбое моего приложения, что наводит меня на мысль, что это синхронная / асинхронная проблема.
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