Tengo una carpeta en mi servidor remoto que tiene algunos archivos .png. Quiero descargarlos desde mi aplicación y almacenarlos en la carpeta 'Documentos' de las aplicaciones. ¿Cómo puedo hacer esto?¿Cómo descargar archivos desde Internet y guardar en 'Documentos' en iPhone?
Respuesta
La manera fácil es utilizar los métodos de conveniencia de NSData initWithContentOfURL:
y writeToFile:atomically:
para obtener los datos y escribirlos, respectivamente. Tenga en cuenta que esto es síncrono y bloqueará el hilo en el que lo ejecute hasta que se completen la recuperación y la escritura.
Por ejemplo:
// Create and escape the URL for the fetch
NSString *URLString = @"http://example.com/example.png";
NSURL *URL = [NSURL URLWithString:
[URLString stringByAddingPercentEscapesUsingEncoding:
NSASCIIStringEncoding]];
// Do the fetch - blocks!
NSData *imageData = [NSData dataWithContentsOfURL:URL];
if(imageData == nil) {
// Error - handle appropriately
}
// Do the write
NSString *filePath = [[self documentsDirectory]
stringByAppendingPathComponent:@"image.png"];
[imageData writeToFile:filePath atomically:YES];
Cuando el método documentsDirectory
es robado descaradamente de this question:
- (NSString *)documentsDirectory {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
return [paths objectAtIndex:0];
}
Sin embargo, a menos que la intención de hilo a ti mismo Esto detendrá la actividad de la interfaz de usuario, mientras que las descargas de archivos. En su lugar, puede consultar NSURLConnection y su delegado: se descarga en segundo plano y notifica a un delegado sobre los datos descargados de forma asincrónica, de modo que puede crear una instancia de NSMutableData y luego escribirla cuando la conexión finalice. Su delegado puede contener métodos como:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
// Append the data to some preexisting @property NSMutableData *dataAccumulator;
[self.dataAccumulator appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// Do the write
NSString *filePath = [[self documentsDirectory]
stringByAppendingPathComponent:@"image.png"];
[imageData writeToFile:filePath atomically:YES];
}
Los pequeños detalles, como la que se declara la dataAccumulator
y tratamiento de errores, se dejan al lector :)
Los documentos importantes:
- 1. ¿Cómo descargar archivos de audio/video desde Internet y almacenar en la aplicación iPhone?
- 2. Descargar y guardar archivos en JMeter
- 3. Descargar Doc/PDF desde Internet y guardarlo en la memoria interna
- 4. ¿Cómo guardar archivos en un iPhone?
- 5. NSIS - descargar y descomprimir archivos comprimidos de Internet
- 6. Cómo capturar vídeo y para guardar documentos en el directorio de iPhone
- 7. Descargar la base de datos SQLite desde Internet y cargarla en la aplicación Android
- 8. ¿Cómo crear un enlace para descargar documentos generados en symfony2?
- 9. ¿Cómo descargar PDF y almacenarlo localmente en el iPhone?
- 10. Guardar imagen en sandbox desde UIImage en iPhone
- 11. descarga de archivos desde UIWebView en iPhone SDK
- 12. Python descarga todos los archivos desde la dirección de internet?
- 13. ¿Cómo descargar en bash desde zippyshare?
- 14. ¿Cómo coloco archivos en la carpeta Documentos en xcode para desarrollo de iPhone?
- 15. ¿Cómo guardar imágenes y archivos grabados en el directorio temporal?
- 16. Descargar un archivo de la url y guardarlo en recursos en el iPhone
- 17. Guardar archivos en cacao
- 18. ¿Cómo puedo descargar y guardar imágenes de la web?
- 19. ¿Cómo puedo descargar un archivo desde una URL y guardarlo en Rails?
- 20. iPhone - cómo guardar la configuración del usuario desde la aplicación?
- 21. iPhone SDK - Agregar contenido comprimido en recursos y luego descomprimirlo en la carpeta Documentos
- 22. Delphi Descargar Video de Internet usando URLDownloadToFile
- 23. Uso de Java para descargar archivos desde una URL HTTPS
- 24. cómo guardar los archivos descargados en la caché de Android
- 25. ¿Crear métodos para actualizar y guardar documentos con mangosta?
- 26. Descargar PDF en Chrome desde TCPDF
- 27. Descargar todos los enlaces (documentos relacionados) en una página web usando Python
- 28. Creación de fuentes y archivos de documentos
- 29. Cómo guardar archivos en la tarjeta SD
- 30. iPhone SDK: ¿Cómo se descargan los archivos de video al Directorio de documentos y luego se reproducen?
Gracias ! Ummm ... ¿Sincrónico? ¿Esto significa que es mejor usar una "rueda/barra de progreso" mientras se realiza el trabajo? – RexOnRoids
Sincrónico significa que toda la actividad en su programa (bueno, el hilo principal) se detendrá por completo hasta que finalice la descarga. Esto significa que la interfaz de usuario aparecerá congelada para el usuario, y los rotantes ni siquiera comenzarán a animar hasta que se complete la descarga (dejándolos bastante inútiles). El segundo método, una descarga asíncrona, permite que su programa siga trabajando en primer plano mientras se descarga en segundo plano. De cualquier manera, sí, deberías usar algún tipo de indicador de progreso. – Tim