NSURLConnection устарела в iOS9
Я хочу скачать файл с NSURLRequest
и сохранить его, но в соответствии с
NSData * data = ...
случается ошибка.
NSURL *Urlstring = [NSURL URLWithString:@"http://yourdomain.com/yourfile.pdf"];
NSURLRequest *request = [NSURLRequest requestWithURL: Urlstring];
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSURL *documentsURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
documentsURL = [documentsURL URLByAppendingPathComponent:@"localFile.pdf"];
[data writeToURL:documentsURL atomically:YES];
Предупреждающее сообщение о том, что я должен использовать NSURLSession dataTaskwithrequest
"так как sendSynchronousRequest
устарела в iOS 9, но это не работает, я надеюсь, что кто-то может мне помочь
1 ответ
Теперь вы должны использовать NSURLSession
Пример (GET):
-(void)placeGetRequest:(NSString *)action withHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))ourBlock {
NSString *urlString = [NSString stringWithFormat:@"%@/%@", URL_API, action];
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:ourBlock] resume];
}
Теперь вам нужно будет вызвать этот метод с действием (или вашим полным URL-адресом, если вы предпочитаете) и блоком, который будет выполнен при возврате вызова API.
[self placeGetRequest:@"action" withHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// your code
}];
Внутри этого блока вы получите NSData
с данными ответа и NSURLResponse
с ответом HTTP. Итак, теперь вы можете поместить свой код там:
NSURL *documentsURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
documentsURL = [documentsURL URLByAppendingPathComponent:@"localFile.pdf"];
[data writeToURL:documentsURL atomically:YES];
Основное различие между NSURLSession и NSURLConnection
NSURLConnection: если у нас есть открытое соединение с NSURLConnection и система прерывает наше приложение, когда наше приложение переходит в фоновый режим, все, что мы получили или отправили, были потеряны.
NSURLSession: решить эту проблему, а также дать нам вне процесса загрузки. Он управляет процессом подключения, даже когда у нас нет доступа. Вам нужно будет использовать
application:handleEventsForBackgroundURLSession:completionHandler
в вашем AppDelegate
Таким образом, с использованием NSURLSession вам не нужно управлять или проверять ваше интернет-соединение, потому что ОС делает это за вас.