J'ai une URL pour une image (obtenue à partir de UIImagePickerController) mais je n'ai plus l'image en mémoire (l'URL a été sauvegardée lors d'une exécution précédente de l'application). Puis-je recharger l'UIImage à partir de l'URL à nouveau?
Je vois que UIImage a une imageWithContentsOfFile: mais j'ai une URL. Puis-je utiliser dataWithContentsOfURL: de NSData pour lire l'URL?
MODIFICATION1
Basé sur la réponse de @Daniel, j'ai essayé le code suivant mais cela ne fonctionne pas...
NSLog(@"%s %@", __PRETTY_FUNCTION__, photoURL);
if (photoURL) {
NSURL* aURL = [NSURL URLWithString:photoURL];
NSData* data = [[NSData alloc] initWithContentsOfURL:aURL];
self.photoImage = [UIImage imageWithData:data];
[data release];
}
Lorsque je l'ai exécuté, la console affiche:
-[PhotoBox willMoveToWindow:] file://localhost/Users/gary/Library/Application%20Support/iPhone%20Simulator/3.2/Media/DCIM/100APPLE/IMG_0004.JPG
*** -[NSURL length]: unrecognized selector sent to instance 0x536fbe0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL length]: unrecognized selector sent to instance 0x536fbe0'
En regardant la pile d'appels, j'appelle URLWithString, qui appelle URLWithString:relativeToURL:, puis initWithString:relativeToURL:, puis _CFStringIsLegalURLString, puis CFStringGetLength, puis forwarding_prep_0, puis forwarding, puis -[NSObject doesNotRecognizeSelector].
Des idées pourquoi mon NSString (l'adresse de photoURL est 0x536fbe0) ne répond pas à length? Pourquoi dit-il qu'il ne répond pas à -[NSURL length]? Ne sait-il pas que le paramètre est une NSString, pas une NSURL?
MODIFICATION2
D'accord, le seul problème avec le code est la conversion de la chaîne en URL. Si je définis en dur la chaîne, tout le reste fonctionne bien. Donc quelque chose ne va pas avec mon NSString et si je ne peux pas le résoudre, je suppose que cela devrait être une autre question. Avec cette ligne insérée (j'ai copié le chemin à partir du journal de la console ci-dessus), tout fonctionne correctement:
photoURL = @"file://localhost/Users/gary/Library/Application%20Support/iPhone%20Simulator/3.2/Media/DCIM/100APPLE/IMG_0004.JPG";
0 votes
Il semble que photoURL est déjà une NSURL, pas une NSString, étant donné que NSLog l'a traité.
0 votes
@drawn: Il semble y avoir une erreur dans la documentation. Il est indiqué que UIImagePickerControllerMediaURL est une NSString mais c'est en fait un objet NSURL.
0 votes
La bibliothèque DLImageLoader est INCROYABLE. solide comme un roc, sans documentation, une seule commande et tout est parfait. Quelle trouvaille.
0 votes
Je soutiens (troisième?) DLImageLoader. J'étais sceptique quant à savoir si les commentaires à son sujet sur cette page étaient objectifs - mais je l'ai quand même essayé et cela fonctionne très bien. J'ai une UIImageView dans une UITableViewCell. Tout ce que j'ai fait était de remplacer l'UIImageView par un DLImageView, puis d'appeler la méthode imageFromUrl: pour charger l'image, et tout fonctionne simplement -- chargement asynchrone, mise en cache, etc. Ce ne pourrait pas être plus simple.
0 votes
DLImageLoader reste fantastique, un autre bon est Haneke, bien qu'il souffre un peu de ne pas être tout à fait maintenu.
0 votes
Toutes ces réponses ne répondent vraiment pas à votre question, vous avez seulement besoin de gérer un chemin local, pas besoin de tous ces méthodes asynchrones complexes, regardez ma réponse ci-dessous.