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):
- Utilice un
NSArray
deNSArray
para almacenarplayField
en su aplicación - Mantenga playField como una matriz de
int
, pero complete un NSArray con números antes de guardar enNSUserDefaults
. - Escribe tu propia subclase de
NSArchiver
para convertir entre una matriz de enteros yNSData
.
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.