ios - para - descargar archivos de dropbox a iphone
Copie las imágenes de una aplicación al Directorio de documentos y vuelva a escribirlas después (2)
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *destPath = [documentsDirectory stringByAppendingPathComponent:@"images"]; //optionally create a subdirectory
//"source" is a physical folder in your app bundle. Once that has a blue color folder (not the yellow group folder)
// To create a physical folder in your app bundle: drag a folder from Mac''s Finder to the Xcode project, when prompts
// for "Choose options for adding these files" make certain that "Create folder references for …" is selected.
// Store all your 300 or so images into this physical folder.
NSString *sourcePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"source"];
NSError *error;
[[NSFileManager defaultManager] copyItemAtPath:sourcePath toPath:destPath error:&error];
if (error)
NSLog(@"copying error: %@", error);
Editado por comentario adicional del PO:
Para volver a escribir con el mismo nombre de archivo en el mismo directorio, puede usar una combinación de fileExistsAtPath y removeItemAtPath para detectar y eliminar el archivo existente antes de escribir.
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath])
{
[[NSFileManager defaultManager] removeItemAtPath:filePath error:&error];
}
// now proceed to write-rewrite
Tengo una aplicación donde tengo una cierta cantidad de imágenes .jpg (aproximadamente 300). Sirven como algo para empezar, porque en realidad están ubicados en Internet, pero obviamente es más conveniente para el usuario no descargarlos todos en el primer inicio de la aplicación, sino tenerlos preempaquetados.
Estoy obligado a reescribir estas imágenes cada vez que obtengo nueva información del servidor. Obviamente, no puedo tocar el paquete de la aplicación, así que veo mis pasos de esta manera:
- Desempaquete las imágenes del paquete en el Directorio de documentos en el primer inicio de una aplicación.
- Acceda a ellos solo desde el directorio de documentos, pero no desde el paquete.
- Si es necesario, debería reescribirlos.
Y así mi código estará unificado, porque siempre usaré la misma ruta para obtener la imagen.
El problema es que sé muy poco acerca de todo el sistema de archivos en iOS, así que no sé cómo descomprimir los contenidos del paquete en particular en el directorio de documentos y tampoco sé cómo escribir en el directorio de documentos.
¿Podría ayudarme con algún código y también confirmar que mi esquema de solución es correcto?
Prueba este código
-(void)demoImages
{
//-- Main bundle directory
NSString *mainBundle = [[NSBundle mainBundle] resourcePath];
NSFileManager *fm = [NSFileManager defaultManager];
NSError *error = [[NSError alloc] init];
NSArray *mainBundleDirectory = [fm contentsOfDirectoryAtPath:mainBundle error:&error];
NSMutableArray *images = [[NSMutableArray alloc]init];
for (NSString *pngFiles in mainBundleDirectory)
{
if ([pngFiles hasSuffix:@".png"])
{
[images addObject:pngFiles];
}
}
NSLog(@"/n/n Doc images %@",images);
//-- Document directory
NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [paths objectAtIndex:0];
NSFileManager *fileManager = [NSFileManager defaultManager];
//-- Copy files form main bundle to document directory
for (int i=0; i<[images count]; i++)
{
NSString *toPath = [NSString stringWithFormat:@"%@/%@",documentDirectory,[images objectAtIndex:i]];
[fileManager copyItemAtPath:[NSString stringWithFormat:@"%@/%@",mainBundle,[images objectAtIndex:i]] toPath:toPath error:NULL];
NSLog(@"/n Saved %@",fileManager);
}
}