objective framework español entre diferencias iphone objective-c cocoa-touch

iphone - framework - objective c vs swift



¿Es posible guardar una matriz de enteros usando NSUserDefaults en iPhone? (4)

¿Es posible guardar una matriz de enteros usando NSUserDefaults en el iPhone? Tengo una matriz declarada en mi archivo .h como: int playfield[9][11] que se llena con enteros de un archivo y determina el diseño de un campo de juego. Quiero poder tener varias ranuras para guardar donde los usuarios pueden guardar sus juegos. Si lo hago:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; [prefs setObject: playfield forKey: @"slot1Save"];

Me sale un error de puntero. Si es posible guardar una matriz de enteros, ¿cuál es la mejor manera de hacerlo y luego recuperarla más tarde?

¡Gracias por adelantado!


De la documentación de NSUserDefaults de Apple :

El valor predeterminado debe ser una lista de propiedades, es decir, una instancia de (o para colecciones una combinación de instancias de): NSData, NSString, NSNumber, NSDate, NSArray o NSDictionary.

Es por eso que está obteniendo el error de puntero.

Tiene varias opciones (en orden de uso recomendado):

  1. Utilice un NSArray de NSArray para almacenar playField en su aplicación
  2. Mantenga playField como una matriz de int , pero complete un NSArray con números antes de guardar en NSUserDefaults .
  3. Escribe tu propia subclase de NSArchiver para convertir entre una matriz de enteros y NSData .

Puede guardar y recuperar la matriz con un contenedor NSData

es decir (sin manejo de errores)

Salvar

NSData *data = [NSData dataWithBytes:&playfield length:sizeof(playfield)]; [prefs setObject:data forKey:@"slot1Save"];

Carga

NSData *data = [prefs objectForKey:@"slot1Save"]; memcpy(&playfield, data.bytes, data.length);


Tendrás que convertir esto a un objeto. Puede usar NSArray o NSDictionary.


Solo use NSArray en lugar de la matriz C normal, entonces resolverá su problema fácilmente.