objective-c - radar - raymarine gps
Guardando un NSArray (3)
Me gustaría guardar un NSArray como archivo o posiblemente usar valores predeterminados del usuario. Esto es lo que espero hacer.
- Recupere NSArray ya guardado (si hay alguno).
- Haz algo con eso.
- Borre los datos guardados (si los hay).
- Guarde el NSArray.
¿Es esto posible? De ser así, ¿cómo debería hacerlo?
Este parece ser un problema más adecuado para Core Data, ya que tratará con todos los datos persistentes del objeto. Cuando recupere sus datos, devolverá un NSSet, que no está ordenado, por lo que tendrá que ordenar de algún modo los datos en la matriz, como un número único de id. Asociado con cada objeto que cree.
Puede implementar NSCoding en los objetos que contiene la matriz y usar NSKeyedArchiver para serializar / deserializar su matriz en el disco.
BOOL result = [NSKeyedArchiver archiveRootObject:myArray toFile:path];
El archivador aplazará su implementación de NSCoding para obtener valores serializables de cada objeto y escribirá un archivo que se puede leer con NSKeyedUnarchiver :
id myArray = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
Más información en la guía de serialización .
NSArray le proporciona dos métodos para hacer exactamente lo que desea: initWithContentsOfFile:
y writeToFile:atomically:
Un breve ejemplo podría verse así:
//Creating a file path under iOS:
//1) Search for the app''s documents directory (copy+paste from Documentation)
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
//2) Create the full file path by appending the desired file name
NSString *yourArrayFileName = [documentsDirectory stringByAppendingPathComponent:@"example.dat"];
//Load the array
NSMutableArray *yourArray = [[NSMutableArray alloc] initWithContentsOfFile: yourArrayFileName];
if(yourArray == nil)
{
//Array file didn''t exist... create a new one
yourArray = [[NSMutableArray alloc] initWithCapacity:10];
//Fill with default values
}
...
//Use the content
...
//Save the array
[yourArray writeToFile:yourArrayFileName atomically:YES];