2011-06-10 14 views
13

Estoy usando el código encontrado en esta publicación: Mulitple Arrays From Plist, con el mismo formato plist.Guardar NSDictionary a plist

Esto funciona con éxito, sin embargo, no sé cómo guardar las matrices creadas en un plist, en el mismo formato.

¿Cómo puedo lograr esto?

EDITAR: No es tanto el ahorro que necesito, sino la formación de los datos para guardar.
The plist es una matriz de diccionarios con cadenas y sus correspondientes teclas. Todas las cadenas con una determinada clave se ponen en una matriz propia.

¿Cómo pondría esa matriz de nuevo en las posiciones correctas en la matriz de diccionarios, lista para guardar?

Respuesta

14

No olvide crear myPlistFile.plist y agréguelo a la carpeta de recursos de la aplicación.

NSError *error; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

puede escanear caminos aquí y buscar myPlistFile.plist utilizando para bucle.

NSString *plistPath = [documentsDirectory stringByAppendingPathComponent:@"myPlistFile.plist"]; 
if (![[NSFileManager defaultManager] fileExistsAtPath: plistPath]) 
{ 
      NSString *bundle = [[NSBundle mainBundle] pathForResource:@"myPlistFile" ofType:@"plist"]; 
      [[NSFileManager defaultManager] copyItemAtPath:bundle toPath:plistPath error:&error]; 
} 
[myDict writeToFile:plistPath atomically: YES]; 
+1

esto no funcionará porque el paquete principal es de solo lectura –

+0

@Ashley Staggs: compruebe la respuesta actualizada. – Jhaliya

+0

sé dónde voy a guardarlo, pero es la formación lo que necesito para hacer bien –

22

Aquí es la forma más simple:

NSDictionary* dict = ...; 
[dict writeToFile:@"..." atomically:YES]; 

consulte la documentación de -writeToFile:atomically:.

+0

Sé que esto va a guardar el archivo, pero yo no creo que esto a su vez, las matrices formadas a partir de la Plist de nuevo en de la misma forma que array-> dictionary-> string –

+6

¿Lo has probado? Puede escribir en un plist cualquier cosa que se pueda leer de un plist. A menos que haya cambiado la forma en que ordena los datos en el diccionario, debe escribir exactamente de la misma manera. –

+1

** Lo más importante ** - Este método valida recursivamente que todos los objetos contenidos son objetos de lista de propiedades (instancias de 'NSData',' NSDate', 'NSNumber',' NSString', 'NSArray', o' NSDictionary') antes de escribir el archivo, y devuelve 'NO' si todos los objetos no son objetos de la lista de propiedades, ya que el archivo resultante no sería una lista de propiedades válida. – enadun

0

Y a la inversa, para cargar un NSDictionary desde un archivo:

+ (id)dictionaryWithContentsOfFile:(NSString *)path;