IOS Iphone应用程序随机无限期挂起
该应用程序基于Xcode 4构建,基本IOS级别为4及以上,并在多种iPhone上进行了测试。应用程序中的信息是从JSON提要加载的 在我试图追踪正在发生的事情的过程中,我通过这个应用程序反复调试,这个应用程序相当基本,有一些视图,就应用程序而言,总体上没有什么惊人或新的东西 问题偶尔会显现出来,在我们的测试中,很多时候都是在我们关闭Wifi测试手机连接时,应用程序在加载时会挂起 发生的情况是,启动屏幕出现,白色旋转活动轮旋转,好像它正在加载广告(广告显示为整个加载过程的一部分),但它只是坐在那里旋转 所以,最明显的问题是,广告是问题所在吗?它大还是装得慢?不,JSOn提要速度很快(我们会在每次应用程序挂起和挂起之间进行检查,以确保加载正常),并且广告大约为20k 调试一直到我将在下面列出的didFinishLaunchingWithOptions方法,它到达该方法的末尾,调试器基本上不报告任何其他内容。它就在那里,在XCode调试导航器中看不到任何东西,没有断点 如果一步一步地执行该方法,一旦它结束,它将在编译代码中执行大约6-7个步骤,然后简单地执行相同的操作 下面是该方法的代码:IOS Iphone应用程序随机无限期挂起,ios,Ios,该应用程序基于Xcode 4构建,基本IOS级别为4及以上,并在多种iPhone上进行了测试。应用程序中的信息是从JSON提要加载的 在我试图追踪正在发生的事情的过程中,我通过这个应用程序反复调试,这个应用程序相当基本,有一些视图,就应用程序而言,总体上没有什么惊人或新的东西 问题偶尔会显现出来,在我们的测试中,很多时候都是在我们关闭Wifi测试手机连接时,应用程序在加载时会挂起 发生的情况是,启动屏幕出现,白色旋转活动轮旋转,好像它正在加载广告(广告显示为整个加载过程的一部分),但它只是坐在那
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions {
[self loadData];
splashViewController = [[OurSplashViewController alloc] initWithNibName:nil bundle:nil];
splashViewController.delegate = self;
OurWebViewController *webViewController = (OurWebViewController *)[[[tabBarController viewControllers] objectAtIndex:2] topViewController];
webViewController.url = [NSURL URLWithString:@"http://m.testURL.com/this_app/"];
webViewController.path = @"/MyPath/Sample";
[window addSubview:splashViewController.view];
[window makeKeyAndVisible];
return YES;
}
因此,它得到了该方法的“是”,然后调试器航行到1和0的土地,没有任何报告回来,挂起应用程序
有人知道这是什么原因吗
更新:
似乎已经将挂起归结为发送了一个JSON调用,但没有收到响应。所以我的代码应该在一段时间后处理它
这是JSON代码,也许有人会注意到我缺少的东西:
- (void)fetchWithURL:(NSURL *)URL {
if (!URL) {
return;
}
self.jsonURL = URL;
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:self.jsonURL];
if (timeout) {
[request setTimeoutInterval:timeout];
}
[request addValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];
connection_ = [[NSURLConnection alloc] initWithRequest:request
delegate:self
startImmediately:YES];
[request release];
if (connection_ != nil) {
if ([self.delegate respondsToSelector:@selector(JSONFetchWillBeginDownload:)]) {
[self.delegate JSONFetchWillBeginDownload:self];
}
receivedData_ = [[NSMutableData alloc] initWithCapacity:0];
} else {
if ([self.delegate respondsToSelector:@selector(JSONFetch:downloadDidFailWithError:)]) {
[self.delegate JSONFetch:self downloadDidFailWithError:[NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorUnknown userInfo:nil]];
}
}
}
根据Charles的说法,响应失败的原因是:
客户端在收到整个响应之前关闭了连接
我想知道我的超时时间是否太短?使用代理调试与远程服务和ad服务器的数据交换
查看此设置所有内容。如果纺车(可能是启动屏幕的一部分)出现,则您发布的方法显然有效。如果启动屏幕没有消失,那么开始调试的明显位置就是发送请求的代码,接收响应的代码随后会关闭启动屏幕
使用代理来验证请求是否发出,响应是否返回。如果是这种情况,则调试接收响应并取消启动屏幕的代码。如果不是这样,调试发送请求的代码
如果你没有找到任何地方,我建议发布相关代码。看起来我的超时时间对于广告来说太短了,因此如果用户关闭了WiFi,那么JSON的加载时间就太长了,导致了问题
通过将超时提高到正常水平来修复此问题。这是用于在本地计算机上调试的?不幸的是,这种情况很少在本地发生,主要是在实际的iPhone上进行测试时。不,Charles既可以用于实际设备,也可以在模拟器中使用。试试看,这对你来说是很有价值的!转到“帮助”|本地IP地址。。在Charles中确定您的本地IP地址。然后打开设备上的设置应用程序,进入Wi-Fi并点击网络的显示箭头。在HTTP代理下,选择手动,将IP地址放入服务器字段,Charles的默认端口为8888。确保Charles中的Proxy菜单中未选择Mac OS X Proxy,因为这会使日志记录与本地计算机的请求混乱。谢谢各位,让Charles试一试。希望这能帮助我们找到答案。您是否通过在服务器端代码中添加过多的延迟来测试超时?您是否通过打开飞机模式测试了全部网络故障?让它一直失败将是一个很好的步骤。看起来它可能与ICloud有关…我终于在手机上复制了它,这个url出现了,应用程序挂起了:划伤ICloud理论…只是手机检查了云,没有干扰