2011-10-02 15 views
7

He seguido esta respuesta para escribir datos en el plist¿Cómo escribir datos en plist?

How to write data to the plist?

Pero hasta ahora mi plist no cambió en absoluto.

Aquí está mi código: -

- (IBAction)save:(id)sender 
{ 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"drinks" ofType:@"plist"]; 
    NSString *drinkName = self.name.text; 
    NSString *drinkIngredients = self.ingredients.text; 
    NSString *drinkDirection = self.directions.text; 
    NSArray *values = [[NSArray alloc] initWithObjects:drinkDirection, drinkIngredients, drinkName, nil]; 
    NSArray *keys = [[NSArray alloc] initWithObjects:DIRECTIONS_KEY, INGREDIENTS_KEY, NAME_KEY, nil]; 
    NSDictionary *dict = [[NSDictionary alloc] initWithObjects:values forKeys:keys]; 
    [self.drinkArray addObject:dict]; 
    NSLog(@"%@", self.drinkArray); 
    [self.drinkArray writeToFile:path atomically:YES]; 
} 

¿Es necesario llevar a cabo algo extra?

Soy nuevo en el SDK de iPhone por lo que cualquier ayuda sería apreciada.

Respuesta

35

Está intentando escribir el archivo en su paquete de aplicaciones, lo que no es posible. Guarde el archivo en la carpeta Documentos en su lugar.

NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
path = [path stringByAppendingPathComponent:@"drinks.plist"]; 

El método pathForResource solo se puede utilizar para leer los recursos que ha agregado a su proyecto en Xcode.

Esto es lo que lo hace normalmente cuando se quiere modificar un plist en su aplicación:
1. Copia del drinks.plist de su paquete de aplicaciones en la carpeta Documentos de la aplicación en el primer lanzamiento (usando NSFileManager).
2. Solo use el archivo en la carpeta Documentos al leer/escribir.

ACTUALIZACIÓN

Esta es la forma en que le inicializar el drinkArray propiedad:

NSString *destPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
destPath = [destPath stringByAppendingPathComponent:@"drinks.plist"]; 

// If the file doesn't exist in the Documents Folder, copy it. 
NSFileManager *fileManager = [NSFileManager defaultManager]; 

if (![fileManager fileExistsAtPath:destPath]) { 
    NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"drinks" ofType:@"plist"]; 
    [fileManager copyItemAtPath:sourcePath toPath:destPath error:nil]; 
} 

// Load the Property List. 
drinkArray = [[NSArray alloc] initWithContentsOfFile:destPath]; 
+0

Muchas gracias por su respuesta. Acabo de aprender el SDK de iPhone, así que ¿puedes decirme cómo copiarlo en el primer lanzamiento? ¿Dónde debería poner el código para copiar mi .plist a mi paquete de aplicaciones? y ¿cómo sabría que ha sido copiado con éxito? Gracias. – Varundroid

+3

He agregado un ejemplo a mi respuesta. :) – chrisklaussner

+0

Muchas gracias ChristianK. :) – Varundroid