我正在制作游戏,当我关闭应用程序时(关闭多任务管理器),我的所有数据都消失了!所以,我的问题非常简单:如何保存数据?
答案 0 :(得分:26)
假设您要保存分数和级别,这两者都是名为dataHolder的对象的属性。
DataHolder可以创建为单例,因此您不必过多担心访问它的位置(实际上是sharedInstance
):
它的代码看起来有点像这样:
<强> DataHolder.h 强>
#import <Foundation/Foundation.h>
@interface DataHolder : NSObject
+ (DataHolder *)sharedInstance;
@property (assign) int level;
@property (assign) int score;
-(void) saveData;
-(void) loadData;
@end
<强> DataHolder.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
不要忘记#import“DataHolder.h”,只需将其放入...-Prefix.pch
。
您可以使用appDelegate
方法执行实际加载和保存:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[[DataHolder sharedInstance] saveData];
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[[DataHolder sharedInstance] loadData];
}
您可以使用[DataHolder sharedInstance].score
和[DataHolder sharedInstance].level
从任意位置访问您的得分和等级数据。
对于一项简单的任务来说,这似乎有些过分,但它确实有助于保持整洁,它可以帮助您避免将所有数据保存在appDelegate
中(这通常是解决问题的快速和肮脏的途径) )。
答案 1 :(得分:10)
[NSUserDefaults standardUserDefaults]
适用于少量数据,例如用户设置和偏好设置。通常,您可以使用它来保存用户保存定义全局值的各种数据,例如角色首选项,武器首选项等等。
对于大量数据,如游戏级别详细信息或成就或武器库存等,您将需要使用类似核心数据的内容。这是一个更正式的数据库,可以在数据模式更改时轻松迁移。请参阅此处的文档: Core Data和Core Data Programming Guide
答案 2 :(得分:9)
您可以将数据保存在Core Data,Sqlite或NSUserDefaults中 的更新强> Realm也是一个选项,非常容易实现。
答案 3 :(得分:1)
Swift 3
UserDefaults.standard.set(„some value”, „key”)
let value = UserDefaults.standard.string(„key”)
您甚至可以使用此
来保留数组答案 4 :(得分:1)
在ios中保存数据的方法很少。
答案 5 :(得分:0)
我建议使用Realm来获得更通用的解决方案。