我在开发iPhone应用时遇到了一个非常奇怪的崩溃问题。似乎每次我向朋友展示我的应用程序时,它都会崩溃,但是在其他情况下它从未崩溃过。在被这种“墨菲定律”的神秘感所困扰之后,我已经确定了崩溃的模式——纽约市地铁。每次使用地铁后,我的应用程序都会崩溃。我追踪到问题出在我的使用
目前我正在做类似于这样的事情:
Reachability
上。在没有网络连接的情况下(不包括飞行模式),应用程序在下一次使用时崩溃。我正在遵循Apple的指导方针,并在执行任何其他网络操作之前检查连接是否可达,但我找到了一些关于如何调用它的冲突文档。目前我正在做类似于这样的事情:
-(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 Guide
我的问题是:是否有适当的使用Reachability
来处理这个错误并处理3G或Wifi网络的缺失?我需要创建另一个线程或执行一些操作来删除同步调用吗?
顺便说一下,这是我在应用程序崩溃时看到的崩溃日志,这让我认为这是一个同步/异步问题。
应用程序特定信息: (app name)无法及时恢复
经过的总CPU时间(秒):3.280(用户1.770,系统1.510),33%CPU 经过的应用程序CPU时间(秒):0.040,0%CPU
线程0名称:Dispatch队列:com.apple.main-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