Je veux télécharger un fichier avec un NSURLRequest
et l'enregistrer mais dans la ligne avec le
NSData * data = ...
se produit une erreur.
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];
Le message d'avertissement est que je dois utiliser NSURLSession dataTaskwithrequest
"car sendSynchronousRequest
est déconseillé dans iOS 9 mais cela ne fonctionne pas J'espère que quelqu'un pourra m'aider
Vous devez maintenant utiliser NSURLSession
Exemple (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];
}
Vous devez maintenant appeler cette méthode avec une action (ou votre URL complète si vous préférez) et le bloc qui sera exécuté lorsque l'appel d'API reviendra.
[self placeGetRequest:@"action" withHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// your code
}];
À l'intérieur de ce bloc, vous recevrez un NSData
avec les données de réponse et NSURLResponse
avec la réponse HTTP. Alors maintenant, vous pouvez y mettre votre code:
NSURL *documentsURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
documentsURL = [documentsURL URLByAppendingPathComponent:@"localFile.pdf"];
[data writeToURL:documentsURL atomically:YES];
Différence principale entre NSURLSession et NSURLConnection
NSURLConnection: si nous avons une connexion ouverte avec NSURLConnection et que le système interrompt notre application, lorsque notre application passe en mode arrière-plan, tout ce que nous avons reçu ou envoyé a été perdu.
NSURLSession: résolvez ce problème et donnez-nous également des téléchargements hors processus. Il gère le processus de connexion même lorsque nous n'y avons pas accès. Vous devrez utiliser application:handleEventsForBackgroundURLSession:completionHandler
dans votre AppDelegate
Ainsi, avec l'utilisation de NSURLSession, vous n'avez pas besoin de gérer ou de vérifier votre connexion Internet car OS le fait pour vous.