Est-il possible pour moi de télécharger une image d'un site Web et de l'enregistrer en permanence dans mon application? Je n'en ai vraiment aucune idée, mais cela ferait une fonctionnalité intéressante pour mon application.
Réponses
Trop de publicités?Vieux post, mais je vais me jeter sur quelques exemples à l'aide de requêtes asynchrones.
D'abord, les blocs d' NSURLConnection
:
- (void)NSURLConnectionExample
{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/images/srpr/logo3w.png"] cachePolicy:NSURLCacheStorageNotAllowed timeoutInterval:10.0];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *err){
if (!err && data) {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documents = [paths objectAtIndex:0];
NSString *finalPath = [documents stringByAppendingPathComponent:@"myImageName.png"];
[data writeToFile:finalPath atomically:YES];
}
}];
}
Ensuite, nous avons ASIHTTPRequest, une commodité wrapper pour CFNetwork
. L'ASI peut-être pas aussi bien adapté à cette base de l'utiliser car il y a beaucoup moins de configurer impliqués dans l'utilisation de NSURLConnection. Toutefois, si vous avez un va-et-vient entre un lot de base des requêtes HTTP et de la connexion avec le RESTE des services, alors je vous recommande vraiment.
- (void)ASIHTTPRequestExample
{
NSURL *url = [NSURL URLWithString:@"http://www.google.com/images/srpr/logo3w.png"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[request setDidFinishSelector:@selector(requestFinished:)];
[request setDidFailSelector:@selector(requestFailed:)];
[[NSOperationQueue mainQueue] addOperation:request];
}
- (void)requestFinished:(ASIHTTPRequest *)request
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documents = [paths objectAtIndex:0];
NSString *finalPath = [documents stringByAppendingPathComponent:@"myImageName.png"];
[[request responseData] writeToFile:finalPath atomically:YES];
}
- (void)requestFailed:(ASIHTTPRequest *)request
{
NSError *error = [request error];
NSLog(@"%@",error);
}
Et enfin, Grand Central Dispatch.
- (void)GrandCentralDispatchExample
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documents = [paths objectAtIndex:0];
NSString *finalPath = [documents stringByAppendingPathComponent:@"myImageName.png"];
dispatch_queue_t imageQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(imageQueue, ^{
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com/images/srpr/logo3w.png"]];
dispatch_async(dispatch_get_main_queue(), ^{
[data writeToFile:finalPath atomically:YES];
});
});
}
Oui, c'est possible.
Télécharger, Créer et Afficher une Image à partir de l'URL
Vérifier les ci-dessous post de blog,c'est l'étape par guide pas à pas avec le code source .
Télécharger une Image et l'Enregistrer en PNG ou JPEG dans le SDK de l'iPhone
pour iOS 7. vous devriez vérifier le raywenderlich post sur ce ...
C'est le concept principal. S'amuser ;)
NSURL *url = [NSURL URLWithString:@"http://example.com/yourImage.png"];
NSData *data = [NSData dataWithContentsOfURL:url];
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
path = [path stringByAppendingString:@"/yourLocalImage.png"];
[data writeToFile:path atomically:YES];