当url连接连接超时时,iphone应用程序崩溃

时间:2010-05-24 08:31:57

标签: iphone timeout connection crash

我正在创建iphone应用。 在那里,当应用程序启动时,它连接到服务器并下载少量图像,然后继续应用程序。当应用程序下载时,它将显示初始启动画面。只要我的服务器能够ping我的iphone,它运行良好。 但是当我的服务器花了很多时间来响应NSURL请求时,麻烦就开始了。 该应用程序崩溃并出现以下错误:

Mon May 14 13:56:34 unknown Springboard[24] <Warning>: com.xxxx.xxx failed to launch in time

我明白当应用程序发生此类问题时,iphone会崩溃应用程序。我想知道iphone允许应用程序响应此类实例的最长时间。

是否有最大值?

3 个答案:

答案 0 :(得分:1)

计时器大约是20-30秒,但这并不重要。

您正在同步下载数据。请使用NSURLConnection将程序更改为异步下载。您的应用程序看起来会更快,并且不会冒终止的风险。您还可以实现超时的错误处理。

答案 1 :(得分:0)

来自Apple's Reachability example上的Readme.txt:

  

Reachability样本演示   异步使用   SCNetworkReachability API。您可以使用   API同步,但不是   通过hostName发出同步检查   在主线程上。如果是设备   无法访问DNS服务器或在   慢速网络,同步呼叫   SCNetworkReachabilityGetFlags   功能可以阻止最多30个   秒试图解决   主机名。如果这发生在主要的   线程,应用程序看门狗将   20秒后杀死应用程序   不活动。

正如保罗所说,做任何类型的同步网络都是一个非常非常糟糕的主意。您需要在iPhone上异步加载。

答案 2 :(得分:0)

如果您的请求和响应操作在主线程中处理,则UI和主线程将被阻止,并且可能需要一些时间来接收响应。如果主线程在特定时间内被阻止,则WATCH DOG将退出您的应用程序。

更好的解决方案是在后台线程或其他线程中运行您的请求。

例如

   if(!backgroundQueue)
    backgroundQueue=[[NSOperationQueue alloc]init];

NSURLRequest *request=[[NSURLRequest alloc]initWithURL:[NSURL URLWithString:url]
                                           cachePolicy:NSURLCacheStorageNotAllowed
                                       timeoutInterval:60];

[NSURLConnection sendAsynchronousRequest:request
                                   queue:backgroundQueue
                       completionHandler:^(NSURLResponse *response,NSData *data,NSError *error) {
    if (complete) {
           // handle your logic here
    }
}];

此操作在后台线程

中处理