设置NSData dataWithContentsOfURL超时

时间:2015-09-30 04:22:35

标签: xcode nsurlconnection nsdata ios9 nsurlsession

所以我在我的应用程序中有这个方法返回BOOL if和update可用于我的应用程序内容

- (BOOL)isUpdateAvailable{
    NSData *dataResponse=[NSData dataWithContentsOfURL:[NSURL URLWithString:@"url that returns json object"] ];
    if(dataResponse!=nil){
        NSError *error;
        dicUpdates = [NSJSONSerialization JSONObjectWithData:dataResponse options:NSJSONReadingMutableContainers error:&error];
    }
    if(dicUpdates.count > 0) isUpdateAvailable = YES;
    else isUpdateAvailable = NO;
    return isUpdateAvailable;
}

我需要一个同步请求,因为下一个视图控制器将依赖于服务器响应。然而,有时服务器需要很长时间才能响应或者互联网真的很慢,我需要设置一个时间来防止应用被“冻结”。

我之前使用NSUrlconnection来完成此任务,但已弃用。

另外,我尝试使用NSURLSession,(也用它来下载后台线程中的更新),但我只能弄清楚它是否可以用于同步请求。

知道怎么处理这个吗?我只需要一个返回BOOL的同步方法。最好的问候。

1 个答案:

答案 0 :(得分:-1)

我们必须在NSURLSession中使用NSURLRequest来设置超时间隔。 检查以下代码:

- (BOOL)isUpdateAvailable{  
NSURLSession *session = [NSURLSession sharedSession];
[[session dataTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"url that returns json object"] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:4]//timeout
        completionHandler:^(NSData *dataResponse,
                            NSURLResponse *response,
                            NSError *error) {
            // handle response
            if(dataResponse!=nil){
                NSError *error;
                dicUpdates = [NSJSONSerialization JSONObjectWithData:dataResponse options:NSJSONReadingMutableContainers error:&error];
            }
            if(dicUpdates.count > 0) isUpdateAvailable = YES;
            else isUpdateAvailable = NO;
            return isUpdateAvailable;


        }] resume];
}