2010-10-17 15 views
6

Tengo un plist en mi aplicación de iPhone y quiero leer y escribir un número entero desde mi único y formarlo.Escribir/Leer archivo plist iPhone

tengo esto que leyó:

scoreData *score = [scoreData sharedData]; 

filePath = @"stats.plist"; 
NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath]; 

score.highScore = [plistDict objectForKey:@"score"]; 

Luego de escribir en él:

scoreData *score = [scoreData sharedData]; 

NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath]; 

[plistDict setValue:score.highScore forKey:@"score"]; 
[plistDict writeToFile:filePath atomically: YES]; 

estoy recibiendo un error en dos partes:

La conversión no es la forma objc_object * a int

y

Formulario de conversión no válido int objc_object

Agradezco cualquier ayuda, gracias.

Respuesta

7

dos cosas:

  1. Cuando se está estableciendo una clave en un diccionario, you're probably aftersetObject:forKey: en lugar de setValue:forKey:.

  2. Diccionarios contienen objetos (tipo id o NSString* o sus propios objetos Obj-C), no tipos primitivos (int, BOOL, etc.).

Cuando se desea almacenar un tipo primitivo en una colección Obj-C, puede "envolver" en un objeto como éste:

[plistDict setObject:[NSNumber numberWithInt:score.highScore] forKey:@"score"]; 

Y recuperarlo como esto:

score.highScore = [[pListDict objectForKey:@"score"] intValue]; 
+0

Crea sin errores nw que es genial! Pero cambio score.highScore, luego salgo de la aplicación por completo, reinicio y vuelve a cero, nunca recupera el valor. Agradecería la ayuda, gracias. –

+0

Descubrimiento interesante. Creo que el código lo estoy usando escribiendo en el plist y leyéndolo pero sin guardarlo para la próxima vez que uso la aplicación. ¿Posible? ¿Cómo puedo evitar esto? –

+0

Probablemente no funcione porque está intentando escribir el diccionario en un archivo .plist dentro de su paquete de aplicaciones, que es de solo lectura. Debería verificar el valor devuelto de '[plistDict writeToFile: filePath atómicamente: YES];' (SÍ = éxito, NO = escritura fallida). Intenta escribir el archivo en una ruta en la carpeta de documentos del paquete de aplicaciones, que es de lectura-escritura.Se puede obtener la ruta de los documentos usando: NSArray * arrayPaths = \t \t NSSearchPathForDirectoriesInDomains ( \t \t \t NSDocumentDirectory, \t \t \t NSUserDomainMask, \t \t \t SI); \t NSString * docDir = [arrayPaths objectAtIndex: 0]; –

Cuestiones relacionadas