2011-12-06 41 views
3

基于Xcode 4构建的应用程序,基本IOS等级为4及以上,在各种IPhone上进行测试。应用中的信息是从JSON Feed加载的。iOS Iphone应用程序无限期地随机挂起

在我试图追查发生了什么我已经多次通过这个程序,有一些看法,整体没有什么惊人的或新的在它尽可能的应用程序去一个相当基本的一个调试。

的问题表现偶尔,有很多在我们测试它一直是,如果我们已经关闭WiFi进行测试蜂窝连接加载时,应用程序将挂起的时间。

会发生什么情况是,在启动画面出现,就好像它加载广告的白色纺纱活动轮旋转(广告被显示为整个装载过程的一部分),但它只是坐在那里打转。

那么,最明显的问题是广告的问题?它是大还是慢加载?不,JSOn feed是快速的(我们每次检查应用程序挂起和中间时间以确保它的全部加载正常),广告大概是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; 
} 

因此,它得到了“YES”这个方法,然后调试帆断成1和0的土地,报告没有回来,挂在应用程序。

有没有人有任何想法可能会造成这种情况?

UPDATE:

似乎已经分离出吊归结到发送一个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]]; 
     } 
    } 
} 

据查尔斯的失败响应的原因是:

客户端接收整个响应前关闭连接

我在想我的超时时间是否太短?

回答

0

看起来我的超时时间对于广告来说太短,并且如果用户关闭了WiFi,那么JSON花费的时间太长,导致问题。

通过将超时时间增加到正常水平来修复它。

1

使用Charles代理的调试与远程服务和广告服务器的数据交换。

看到这个tutorial设置一切。

+0

这是为了在本地机器上进行调试吗?不幸的是,它很少发生在本地,主要是在实际的IPhone上进行测试。 –

+0

不,Charles可以同时用于实际设备和模拟器内部。试试吧,它对你来说会很有价值! – Till

+1

转到*帮助|本地IP地址.. *在查尔斯确定您的本地IP地址。然后打开设备上的设置应用程序,然后转到* Wi-Fi *并点击网络公开箭头。在* HTTP代理*下,选择*手动*,将IP地址放入服务器字段,查询的默认端口为8888.确保在查尔斯的代理菜单中没有选择* Mac OS X代理*,因为这样会只需使用本地计算机的请求来处理日志记录即可。 – Jim

1

如果纺车(这大概是闪屏的一部分)出现,那么你已经张贴的方法显然是工作。如果启动画面没有消失,则启动调试的明显位置在发送请求的代码中,接收到响应的代码将关闭启动画面。

使用像Charles这样的代理来验证请求是否正在发送并且响应正在返回。如果是这种情况,请调试接收响应的代码并关闭启动屏幕。如果不是这种情况,请调试发送请求的代码。

如果你没有得到任何地方,我建议发布相关的代码。

+0

看起来它可能与ICloud有关....我终于设法在手机上复制它,此URL即将上架,应用程序挂起:https:// p04- ubiquity.icloud.com:443 –

+0

划伤Icloud理论...只是电话检查云,不干扰 –