Utilizar createDirectoryAtPath: withIntermediateDirectories: attributes: error
NSString *directorioTemp = NSTemporaryDirectory();
NSFileManager *fileManager = [[NSFileManager alloc] init];
NSString *ubicacion = [directorioTemp stringByAppendingPathComponent: @"directorionuevo"];
if([fileManager createDirectoryAtPath:ubicacion withIntermediateDirectories:YES attributes:nil error:&errorInfo]){
NSLog(@"Almacenado correctamente");
}
miércoles, 23 de abril de 2014
Escribir y leer en Ficheros
Las clases Cocoa permiten almacenar información como por ejemplo, NSString, UIImage y NSData.
Se puede utilizar el método writeToFile: automatically: encoding: error: de NSString para almacenar su contenido en el sistema de archivos.
Significado de los parámetros:
NSString *guardaEsteTexto = @"Este contenido lo almaceno en el fichero";
Bool grabado = [guardaEsteTexto writeToFile:destinationPath automatically:YES
encoding:NSUTF8StringEncoding error:&errorInfo];
Si se quiere trabajar con URLs encapsularlo en una instancia de NSURL, utilizar el método
writeToURL: automatically: encoding: error:
La instancia de un NSURL puede apuntar a los recursos (ficheros, directorios, etc) local o remotamente.
También es posible almacenar un NSArray en un fichero.
NSArray *arrayValores = @[@"valor1",@"valor2",@"valor3"];
NSString *ubicacion = [NSTemporaryDirectory()
stringByAppendingPathComponent:@"nombrefichero.txt"];
if([arrayValores writeToFile:ubicacion automatically:YES]){
NSArray *recuperarArray = [[NSArray alloc] initWithContentsOfFile:ubicacion];
}
Para almacenar NSArray debe de contener objetos de los siguientes tipos:
Se puede utilizar el método writeToFile: automatically: encoding: error: de NSString para almacenar su contenido en el sistema de archivos.
Significado de los parámetros:
- writeToFile, la ubicación del fichero.
- automatically, valor Boolean si está establecdia YES primero escribe el fichero en un espacio temporal.
- encoding, el encoding del texto que se va ha almacenar, normalmente UTF8, utilizando la constante NSUTF8StringEncoding.
- error, puntero a un objeto NSError.
NSString *guardaEsteTexto = @"Este contenido lo almaceno en el fichero";
Bool grabado = [guardaEsteTexto writeToFile:destinationPath automatically:YES
encoding:NSUTF8StringEncoding error:&errorInfo];
Si se quiere trabajar con URLs encapsularlo en una instancia de NSURL, utilizar el método
writeToURL: automatically: encoding: error:
La instancia de un NSURL puede apuntar a los recursos (ficheros, directorios, etc) local o remotamente.
También es posible almacenar un NSArray en un fichero.
NSArray *arrayValores = @[@"valor1",@"valor2",@"valor3"];
NSString *ubicacion = [NSTemporaryDirectory()
stringByAppendingPathComponent:@"nombrefichero.txt"];
if([arrayValores writeToFile:ubicacion automatically:YES]){
NSArray *recuperarArray = [[NSArray alloc] initWithContentsOfFile:ubicacion];
}
Para almacenar NSArray debe de contener objetos de los siguientes tipos:
- NSString
- NSDictionary
- NSArray
- NSData
- NSNumber
- NSDate
Si se intenta insertar otros tipos de objetos en el array el contenido no será grabada en el directorio, porque el método primero valida que el contenido de objetos es uno de los anteriores.
La clase NSDictionary es muy similar a NSArray para almacenar información.
Obtener las carpetas en el Dispositivo
Utilizar el método URLsForDirectory de la entidad clase NSFileManage.
Permite buscar directorios en el systema de directorios iOs.
Parámetros :
URLsForDirectory
El directorio que se quiere obtener, pasando un valor de tipo NSSearchPathDirectory.
inDomains
Esta es donde se busca el directory. El valor de este parámetro debe de ser de tipo NSSearchPathDomainMask.
NSFileManager *fileManager= [[NSFileManager alloc] init];
NSArray *ubicaciones = [fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
if(ubicaciones.count>0){
NSURL *carpeta = ubicaciones[0];
}
Valores posibles de URLsForDirectory.
Permite buscar directorios en el systema de directorios iOs.
Parámetros :
URLsForDirectory
El directorio que se quiere obtener, pasando un valor de tipo NSSearchPathDirectory.
inDomains
Esta es donde se busca el directory. El valor de este parámetro debe de ser de tipo NSSearchPathDomainMask.
NSFileManager *fileManager= [[NSFileManager alloc] init];
NSArray *ubicaciones = [fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
if(ubicaciones.count>0){
NSURL *carpeta = ubicaciones[0];
}
Valores posibles de URLsForDirectory.
- NSLibraryDirectory, la carpeta library de la app.
- NSCachesDirectory, la carpeta chache de la app.
- NSDocumentDirectory, la carpeta document de la app.
Valores de inDomains
- NSUserDomainMask, la búsqueda a ejecutar en la carpeta del usuario.
Si quiere encontrar la carpeta tmp utilice NSTemporaryDirectory().
NSString *temporal = NSTemporaryDirectory();
Ficheros y Carpetas
La carpeta raíz (nombre_aplicacion.app) de todas las aplicaciones contienen varias carpetas.
La carpeta a pesar de tener extensión .app realmente es una carpeta. El contenido de los recursos de la aplicación reside en esa carpeta, los iconos de la aplicación, el fichero binario generado, etc.
Contenido de carpetas:
Documents: Esta carpeta es la destinación para todo el contenido de creado por el usuario. Contenido que la app ha generado, descargas, o ficheros creados no debería estar almacenado en esta carpeta.
Library: Utiliza este directorio para almacenar ficheros cacheados, preferencias de usuarios. Esta carpeta contiene otras carpetas que contienen ficheros.
La carpeta a pesar de tener extensión .app realmente es una carpeta. El contenido de los recursos de la aplicación reside en esa carpeta, los iconos de la aplicación, el fichero binario generado, etc.
Contenido de carpetas:
Documents: Esta carpeta es la destinación para todo el contenido de creado por el usuario. Contenido que la app ha generado, descargas, o ficheros creados no debería estar almacenado en esta carpeta.
Library: Utiliza este directorio para almacenar ficheros cacheados, preferencias de usuarios. Esta carpeta contiene otras carpetas que contienen ficheros.
- Library/Caches: En esta carpeta se puede almacenar datos que la app puede posteriormente generar de nuevo. El contenido de esta carpeta no se hace copia de seguridad por parte de iOs.
- Library/Preferences: Esta carpeta contiene las preferencias que la app quiere recordar entre las ejecuciones de la app.
- Library/Application Support: Los datos que la app crea, deben de almacenarse en esta carpeta. iOs realiza copias de seguridad de esta carpeta.
Temp: Ubicar ficheros temporales que la app puede crear, ficheros descargados, etc.
martes, 15 de abril de 2014
Core Data (Ordenar Datos)
Para ordenar el managed object - registros - que obtenemos de un managed object context - base de datos -.
NSSortDescriptor permite ordenar por atributos - columnas - de una entidad.
NSSortDescriptor *ordenAnyo = [[NSSortDescriptor alloc]
initWithKey:@"anyo" ascending:YES];
NSSortDescriptor *ordenMes = [[NSSortDescriptor alloc]
initWithKey:@"mes" ascending:YES];
NSArray *ordenColumnas = [[NSArray alloc] initWithObject, ordenAnyo, ordenMes, nil];
NSSortDescriptor permite ordenar por atributos - columnas - de una entidad.
NSSortDescriptor *ordenAnyo = [[NSSortDescriptor alloc]
initWithKey:@"anyo" ascending:YES];
NSSortDescriptor *ordenMes = [[NSSortDescriptor alloc]
initWithKey:@"mes" ascending:YES];
NSArray *ordenColumnas = [[NSArray alloc] initWithObject, ordenAnyo, ordenMes, nil];
fetchRequest.sortDescriptors = ordenColumnas;
El orden que asignamos en el array ordenColumnas es el orden establecido en la petición de datos fetchRequest.
Core Data (Eliminar Registros/Entidades)
Para eliminar un managed object - similitud con una row en una tabla - de un managed object context - similitud de una base de datos -.
El método deleteObject del NSManagedObjectContext realiza esta operación de elimnación de un managed object.
NSArray *articulos = [self.managedObjectContext executeFetchRequest: fetchRequest error:&errorInfo];
// Eliminamos uno del array
Articulo *articulo = [articulos lastObject];
[self.managedObjectContext deleteObject:articulo];
// Antes de actualizar el managedObjectContext nos aseguramos el borrado
if([articulo isDeleted]) {
NSError *errorInfo = nil;
if([self.managedObjectContext save:&errorInfo]){
NSLog(@"Actualizado el contexto");
}
El método deleteObject del NSManagedObjectContext realiza esta operación de elimnación de un managed object.
NSArray *articulos = [self.managedObjectContext executeFetchRequest: fetchRequest error:&errorInfo];
// Eliminamos uno del array
Articulo *articulo = [articulos lastObject];
[self.managedObjectContext deleteObject:articulo];
// Antes de actualizar el managedObjectContext nos aseguramos el borrado
if([articulo isDeleted]) {
NSError *errorInfo = nil;
if([self.managedObjectContext save:&errorInfo]){
NSLog(@"Actualizado el contexto");
}
Core Data (Leer datos)
Para obtener los datos de tus entidades (tablas) utilizando Core Data.
Con NSFetchRequest
1) Crear un NSFetchRequest
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
2) Indicar la entidad a la que queremos acceder
NSEntityDescriptor *entidad = [NSEntityDescriptor entityForName:@"Articulo" inManagedObjectContext: self.managedObjectContext];
3) Asignar a NSFetchRequest
[fetchRequest setEntity:entidad];
4) NSError para almacenar la información del error, si se produce.
NSError *errorInfo = nil;
5) Llamar al método executeFetchRequest
NSArray *articulos = [self.managedObjectContext executeFetchRequest: fetchRequest error:&errorInfo];
6) Comprobar si hemos obtenido valores
if([articulos count] > 0){
for(Articulo *articuloIn in articulos){
NSLog(articuloIn.nombre);
}
}
NSFetchRequest es similar a la sentencia Sql Select de las tablas tradicionales. Especifica la fila a obtener, una condición, el orden que retorna de la entidad (tabla) seleccionada.
Con NSFetchRequest
1) Crear un NSFetchRequest
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
2) Indicar la entidad a la que queremos acceder
NSEntityDescriptor *entidad = [NSEntityDescriptor entityForName:@"Articulo" inManagedObjectContext: self.managedObjectContext];
3) Asignar a NSFetchRequest
[fetchRequest setEntity:entidad];
4) NSError para almacenar la información del error, si se produce.
NSError *errorInfo = nil;
5) Llamar al método executeFetchRequest
NSArray *articulos = [self.managedObjectContext executeFetchRequest: fetchRequest error:&errorInfo];
6) Comprobar si hemos obtenido valores
if([articulos count] > 0){
for(Articulo *articuloIn in articulos){
NSLog(articuloIn.nombre);
}
}
NSFetchRequest es similar a la sentencia Sql Select de las tablas tradicionales. Especifica la fila a obtener, una condición, el orden que retorna de la entidad (tabla) seleccionada.
Suscribirse a:
Entradas (Atom)