Configurar un plist para almacenar datos de aplicaciones (no configuraciones) para un juego de iPhone

Estoy escribiendo un juego de iPhone y hago que funcione bien con mis datos de nivel codificados en forma rígida, pero me gustaría almacenar los datos de nivel en un plist y cargarlo en el lanzamiento. Nunca he usado plists y estoy teniendo problemas para entender cómo debo configurar el plist basado en mi model de datos.

Aquí es cómo lo tengo codificado ahora:

(en mi appDelegate)

- (void)loadLevels { //setup NSNumber objects to load into sequences NSNumber * rID = [[[NSNumber alloc] initWithInt:0] autorelease]; NSNumber * bID = [[[NSNumber alloc] initWithInt:1] autorelease]; NSNumber * gID = [[[NSNumber alloc] initWithInt:2] autorelease]; NSNumber * yID = [[[NSNumber alloc] initWithInt:3] autorelease]; NSNumber * rbID = [[[NSNumber alloc] initWithInt:4] autorelease]; NSNumber * rgID = [[[NSNumber alloc] initWithInt:5] autorelease]; NSNumber * ryID = [[[NSNumber alloc] initWithInt:6] autorelease]; NSNumber * bgID = [[[NSNumber alloc] initWithInt:7] autorelease]; NSNumber * byID = [[[NSNumber alloc] initWithInt:8] autorelease]; NSNumber * gyID = [[[NSNumber alloc] initWithInt:9] autorelease]; //Level One's Sequence NSMutableArray * aSequence = [[[NSMutableArray alloc] initWithCapacity:1] autorelease]; [aSequence addObject: rID]; [aSequence addObject: bID]; [aSequence addObject: gID]; [aSequence addObject: yID]; [aSequence addObject: rbID]; [aSequence addObject: rgID]; [aSequence addObject: ryID]; [aSequence addObject: bgID]; [aSequence addObject: byID]; [aSequence addObject: gyID]; // Load level One _levels = [[[NSMutableArray alloc] init] autorelease]; Level *level1 = [[[Level alloc] initWithLevelNum:1 levelSpeed:1.0 levelSequence:aSequence] autorelease]; [_levels addObject:level1]; //do the same thing for subsequent levels// } 

(así es como implemento mi class de nivel)

 #import "Level.h" @implementation Level @synthesize levelNum = _levelNum; @synthesize levelSpeed = _levelSpeed; @synthesize levelSequence = _levelSequence; - (id)initWithLevelNum:(int)levelNum levelSpeed:(float)levelSpeed levelSequence:(NSMutableArray *)levelSequence { if ((self = [super init])) { self.levelNum = levelNum; self.levelSpeed = levelSpeed; self.levelSequence = [[[NSMutableArray alloc] initWithArray:levelSequence] autorelease]; } return self; } - (void)dealloc { [_levelSequence release]; _levelSequence = nil; [super dealloc]; } @end 

Simplemente no estoy obteniendo cómo configurar un plist para almacenar mis datos para que coincida con mi model. ¿Alguien puede darme un consejo por favor?

ADEMÁS: (así es como creo que necesito configurar el plist – el model de datos es simplemente las tres variables que inicializan mi nivel (arriba). Si miras mi plist actual, podría ser más claro cómo está configurado, pero cada nivel está compuesto por: un número de nivel, una velocidad de nivel y una matriz de numbers que denota la secuencia requerida para ese nivel).

Mi configuración actual de plist

Ahora, si tengo esta configuration correctamente, ¿cómo puedo cargar los valores en mi progtwig?

  • Agregue su file Plist como un file de resources en su proyecto. Di que su nombre es config.plist

  • Obtenga la ruta del file de resources. (Sin embargo, tenga cuidado con [NSBundle mainBundle], ya que no devolverá el package de testing de unidad en una testing de unidad).

 NSString * plistPath = [[NSBundle mainBundle] pathForResource: @ "config" ofType: @ "plist"];
  • Su object raíz es una matriz de niveles. Cargarlo en un NSArray.
 // esto es autoreleased  puedes retenerlo si es necesario
 NSArray * levelArray = [NSArray arrayWithContentsOfFile: plistPath];
  • Ahora tienes la matriz de niveles. Cada nivel es un dictionary. Cargue el nivel i (contando desde 0).
 NSDictionary * level = [levelArray objectAtIndex: i];
  • Ahora puede get los objects del dictionary de nivel utilizando el método objectForKey. Por ejemplo, para get la matriz de secuencia:
 NSArray * seq = [level objectForKey: @ "levelSequence"];
  • Puede recorrer el nivelArray para asignar, iniciar y agregar a la matriz de niveles para todos sus niveles.

Espero eso ayude. Tenga en count que no compilé el código, por lo que puede haber algunos errores tipocharts.

Lo que debe hacer es crear un NSDictionary con todos los datos aplicables que desee y leerlo y escribirlo en NSUserDefaults .