IOS Iphone应用程序随机无限期挂起

IOS Iphone应用程序随机无限期挂起,ios,Ios,该应用程序基于Xcode 4构建,基本IOS级别为4及以上,并在多种iPhone上进行了测试。应用程序中的信息是从JSON提要加载的 在我试图追踪正在发生的事情的过程中,我通过这个应用程序反复调试,这个应用程序相当基本,有一些视图,就应用程序而言,总体上没有什么惊人或新的东西 问题偶尔会显现出来,在我们的测试中,很多时候都是在我们关闭Wifi测试手机连接时,应用程序在加载时会挂起 发生的情况是,启动屏幕出现,白色旋转活动轮旋转,好像它正在加载广告(广告显示为整个加载过程的一部分),但它只是坐在那

该应用程序基于Xcode 4构建,基本IOS级别为4及以上,并在多种iPhone上进行了测试。应用程序中的信息是从JSON提要加载的

在我试图追踪正在发生的事情的过程中,我通过这个应用程序反复调试,这个应用程序相当基本,有一些视图,就应用程序而言,总体上没有什么惊人或新的东西

问题偶尔会显现出来,在我们的测试中,很多时候都是在我们关闭Wifi测试手机连接时,应用程序在加载时会挂起

发生的情况是,启动屏幕出现,白色旋转活动轮旋转,好像它正在加载广告(广告显示为整个加载过程的一部分),但它只是坐在那里旋转

所以,最明显的问题是,广告是问题所在吗?它大还是装得慢?不,JSOn提要速度很快(我们会在每次应用程序挂起和挂起之间进行检查,以确保加载正常),并且广告大约为20k

调试一直到我将在下面列出的didFinishLaunchingWithOptions方法,它到达该方法的末尾,调试器基本上不报告任何其他内容。它就在那里,在XCode调试导航器中看不到任何东西,没有断点

如果一步一步地执行该方法,一旦它结束,它将在编译代码中执行大约6-7个步骤,然后简单地执行相同的操作

下面是该方法的代码:

- (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理论…只是手机检查了云,没有干扰