检索远程文件时,由于连接速度慢而导致应用程序崩溃

Dus*_*ter 0 ios

我目前正在我的应用程序中使用一个函数didFinishLaunchingWithOptions来检索文件,将其保存到应用程序目录中.

我发现当连接很弱时,应用程序会在发生这种情况时崩溃.我读到苹果在崩溃应用程序之前有20秒的时间限制.它是否正确?如果是这样,我相信这会导致我的问题,因为应用程序完美无缺,除了处于非常弱的连接之外.

我怎么能修改下面的逻辑来试图弥补这个?

- (void)writeJsonToFile
{   
//applications Documents dirctory path
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

//live json data url
NSString *stringURL = @"http://link-to-my-data.json";
NSURL *url = [NSURL URLWithString:stringURL];
NSData *urlData = [NSData dataWithContentsOfURL:url];

//attempt to download live data
if (urlData)
{   
    NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"data.json"];
    [urlData writeToFile:filePath atomically:YES];
}
//copy data from initial package into the applications Documents folder
else
{
    //file to write to
    NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"data.json"];

    //file to copy from
    NSString *json = [ [NSBundle mainBundle] pathForResource:@"data" ofType:@"json" inDirectory:@"html/data" ];
    NSData *jsonData = [NSData dataWithContentsOfFile:json options:kNilOptions error:nil];

    //write file to device
    [jsonData writeToFile:filePath atomically:YES];
}
Run Code Online (Sandbox Code Playgroud)

}

lxt*_*lxt 5

在主线程上运行这种东西是一个非常糟糕的主意:我假设你是 - 基本上,当你等待网络操作完成时,你将阻止整个UI.

dataWithContentsOfURL这种事情不是一个好主意.使用NSURLConnection或其中一个包装库会更好AFNetworking,因为你可以处理连接超时优雅的情况.

这些库还具有内置方法来异步下载数据,从而防止主UI线程被锁定.