iphone - movimiento - subir live fotos a instagram
¿Cómo puedo guardar una imagen en el directorio tmp de mi aplicación? (3)
Este es el método preferido que utiliza las URL para obtener un enlace directamente al directorio tmp y luego devuelve una URL de archivo (pkm.jpg) para ese directorio:
Swift 4.1
let url = URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true)
.appendingPathComponent("pkm", isDirectory: false)
.appendingPathExtension("jpg")
// Then write to disk
if let data = UIImageJPEGRepresentation(image, 0.8) {
do {
try data.write(to: url)
} catch {
print("Handle the error, i.e. disk can be full")
}
}
Swift 3.1
let tmpURL = try! URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true)
.appendingPathComponent("pkm")
.appendingPathExtension("jpg")
print("Filepath: /(tmpURL)")
Tenga en cuenta que un posible error no se maneja!
Swift 2.0
let tmpDirURL = NSURL.fileURLWithPath(NSTemporaryDirectory(), isDirectory: true)
let fileURL = tmpDirURL.URLByAppendingPathComponent("pkm").URLByAppendingPathExtension("jpg")
print("FilePath: /(fileURL.path)")
C objetivo
NSURL *tmpDirURL = [NSURL fileURLWithPath:NSTemporaryDirectory() isDirectory:YES];
NSURL *fileURL = [[tmpDirURL URLByAppendingPathComponent:@"pkm"] URLByAppendingPathExtension:@"jpg"];
NSLog(@"fileURL: %@", [fileURL path]);
Tenga en cuenta que algunos métodos aún solicitan una ruta como una cadena, luego use la [fileURL path]
para devolver la ruta como una cadena (como se muestra arriba en el NSLog). Al actualizar una aplicación actual todos los archivos en las carpetas:
<Application_Home>/Documents/
<Application_Home>/Library/
se garantiza que se conservarán de la versión anterior (excluyendo el subdirectorio <Application_Home>/Library/Caches
). Use la carpeta Documents
para los archivos a los que desea que el usuario tenga acceso y la carpeta de la Library
para los archivos que usa la aplicación y que el Usuario no debe ver.
Otra forma más larga podría ser obtener una url para el directorio tmp, primero obteniendo el directorio de documentos y eliminando el último componente de la ruta y luego agregando la carpeta tmp:
NSURL *documentDir = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] firstObject];
NSURL *tmpDir = [[documentDir URLByDeletingLastPathComponent] URLByAppendingPathComponent:@"tmp" isDirectory:YES];
NSLog(@"tmpDir: %@", [tmpDir path]);
Entonces podemos dirigir un archivo allí, es decir, pkm.jpg como se muestra aquí:
NSString *fileName = @"pkm";
NSURL *fileURL = [tmpDir URLByAppendingPathComponent:fileName isDirectory:NO];
fileURL = [fileURL URLByAppendingPathExtension:@"jpg"];
Lo mismo se puede lograr con cadenas, que se usaron por cierto en sistemas iOS más antiguos, pero el primer método de URL anterior es el recomendado ahora (a menos que esté escribiendo en sistemas más antiguos: iPhone OS 2 o 3):
NSString *tmpDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
tmpDir = [[tmpDir stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"tmp"];
NSString *filePath = [[tmpDir stringByAppendingPathComponent:@"pkm"] stringByAppendingPathExtension:@"jpg"];
¿Por qué es que si uso NSTemporaryDirectory
para guardar mi imagen, la imagen se guarda en
/ var / carpetas / oG / oGrLHcAUEQubd3CBTs-1zU +++ TI / -Tmp- /
y no en
/ Users / MyMac / Library / Application Support / iPhone Simulator / 4.3.2 / Applications / A685734E-36E9-45DD-BBE7-0A46F8F91DAF / tmp
Aquí está mi código:
-(NSString *)tempPath
{
return NSTemporaryDirectory();
}
-(void) saveMyFoto
{
NSString *urlNahledu = [NSString stringWithFormat:@"%@%@%@",@"http://www.czechmat.cz", urlFotky,@"_100x100.jpg"];
NSLog(@"%@", urlNahledu);
UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:urlNahledu]]];
NSData *data = [NSData dataWithData:UIImageJPEGRepresentation(image, 0.8f)];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSLog(@"%@ %@", paths, [self tempPath]);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *localFilePath = [documentsDirectory stringByAppendingPathComponent:@"pkm.jpg"];
[data writeToFile:localFilePath atomically:YES];
}
Porque las aplicaciones que se ejecutan en el simulador no están realmente en un espacio aislado como en los dispositivos iOS. En el simulador, se devuelve un directorio temporal de Mac OS en NSTemporaryDirectory (): en un dispositivo iOS, el directorio temporal se encuentra realmente dentro de la caja de arena. Esa diferencia no debería preocuparte como desarrollador de aplicaciones.
Si desea almacenar sus imágenes en / Users / MyMac / Library / Application Support / iPhone Simulator / 4.3.2 / Applications / A685734E-36E9-45DD-BBE7-0A46F8F91DAF / tmp
luego use nshomedirectory () que le da la ubicación hasta / Usuarios / MiMac / Biblioteca / Soporte de aplicaciones / iPhone Simulator / 4.3.2 / Aplicaciones / A685734E-36E9-45DD-BBE7-0A46F8F91DAF, luego simplemente coloca / tmp y almacena sus imágenes.
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString* docDir = [paths objectAtIndex:0];
NSString* file = [docDir stringByAppendingString:@"/tmp"];