Ответ 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, вам не нужно управлять или проверять ваше интернет-соединение, потому что ОС делает это за вас.