ios - recuperar - icloud para windows
Cómo guardar datos en iOS (6)
Estoy haciendo un juego y cuando cierro la aplicación (cerca del administrador de multitareas), ¡todos mis datos se han ido! Entonces, mi pregunta es muy simple: ¿Cómo guardo los datos?
Digamos que desea guardar la puntuación y el nivel, que son propiedades de un objeto llamado dataHolder.
DataHolder se puede crear como un singleton, por lo que no tiene que preocuparse demasiado por el lugar desde el que accede a él (en realidad es una sharedInstance
):
Su código se vería un poco así:
DataHolder.h
#import <Foundation/Foundation.h>
@interface DataHolder : NSObject
+ (DataHolder *)sharedInstance;
@property (assign) int level;
@property (assign) int score;
-(void) saveData;
-(void) loadData;
@end
Titular de datos.m
NSString * const kLevel = @"kLevel";
NSString * const kScore = @"kScore";
@implementation DataHolder
- (id) init
{
self = [super init];
if (self)
{
_level = 0;
_score = 0;
}
return self;
}
+ (DataHolder *)sharedInstance
{
static MDataHolder *_sharedInstance = nil;
static dispatch_once_t onceSecurePredicate;
dispatch_once(&onceSecurePredicate,^
{
_sharedInstance = [[self alloc] init];
});
return _sharedInstance;
}
//in this example you are saving data to NSUserDefault''s
//you could save it also to a file or to some more complex
//data structure: depends on what you need, really
-(void)saveData
{
[[NSUserDefaults standardUserDefaults]
setObject:[NSNumber numberWithInt:self.score] forKey:kScore];
[[NSUserDefaults standardUserDefaults]
setObject:[NSNumber numberWithInt:self.level] forKey:kLevel];
[[NSUserDefaults standardUserDefaults] synchronize];
}
-(void)loadData
{
if ([[NSUserDefaults standardUserDefaults] objectForKey:kScore])
{
self.score = [(NSNumber *)[[NSUserDefaults standardUserDefaults]
objectForKey:kScore] intValue];
self.level = [(NSNumber *)[[NSUserDefaults standardUserDefaults]
objectForKey:kLevel] intValue];
}
else
{
self.level = 0;
self.score = 0;
}
}
@end
No olvide #importar "DataHolder.h" donde lo necesite, o simplemente póngalo en ...-Prefix.pch
.
Podría realizar la carga y el ahorro reales en los métodos appDelegate
:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[[DataHolder sharedInstance] saveData];
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[[DataHolder sharedInstance] loadData];
}
Puede acceder a su puntuación y datos de nivel desde cualquier lugar con [DataHolder sharedInstance].score
y [DataHolder sharedInstance].level
.
Esto puede parecer una exageración para una tarea simple pero seguro que ayuda a mantener las cosas ordenadas y puede ayudarlo a evitar mantener todos los datos en appDelegate
(que suele ser el camino rápido y sucio hacia la solución).
Hay pocas formas de guardar datos en ios.
- UserDefaults: excelente manera de guardar una pequeña cantidad de datos.
- Llavero: ubicación segura para datos seguros de alta sensibilidad, como datos de inicio de sesión y contraseñas.
- Base de datos Sqlite: si su aplicación tiene una gran cantidad de datos estructurados
- CoreData: basado en un gráfico de objetos que describe los objetos que deben guardarse
- Guardar archivos: por supuesto, también puede guardar directamente todos los tipos de archivos en el sistema de archivos. Sin embargo, solo puede acceder al sistema de archivos dentro del contenedor de la aplicación debido a razones de seguridad.
- Uso de la base de datos Realm: la mejor alternativa a Core Data y SQLite db
- NSKeyedArchiver y NSKeyedUnarchiver: mejor manera para una pequeña cantidad de objetos. // creo que sí
Puede guardar datos en CoreData, SqlLite o NSUserDefaults Update Realm también es una opción y muy fácil de implementar.
Recomiendo usar Realm para soluciones más generalizadas.
[NSUserDefaults standardUserDefaults]
es bueno para pequeñas cantidades de datos como la configuración y las preferencias del usuario. Por lo general, se usa para permitir que los usuarios guarden varios bits de datos que definen valores globales como las preferencias de los personajes, las preferencias de armas, lo que sea, etc.
Para grandes cantidades de datos, como detalles del nivel de juego o logros, o inventario de armas, etc. Querrás usar algo como Core Data. Esta es una base de datos más formal que se puede migrar fácilmente a medida que cambia su esquema de datos. Consulte los documentos aquí: Guía de programación de datos básicos y de datos básicos.
Swift 3
Use UserDefaults
UserDefaults.standard.set(„some value”, „key”)
let value = UserDefaults.standard.string(„key”)
Incluso puedes persistir en el array usando este