如何在iOS中保存数据

CenoX

我正在做一个游戏,当我关闭应用程序(在多任务管理器中关闭)时,我所有的数据都消失了!因此,我的问题很简单:如何保存数据?

罗克·贾克(Rok Jarc)

假设您要保存得分和级别,它们都是名为dataHolder的对象的属性。

DataHolder可以作为一个单例创建,因此您不必过多担心从何处访问它(sharedInstance实际上):

它的代码看起来像这样:

数据保持器

#import <Foundation/Foundation.h>

@interface DataHolder : NSObject 

+ (DataHolder *)sharedInstance;

@property (assign) int level;
@property (assign) int score;

-(void) saveData;
-(void) loadData;

@end

数据保持器

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(通常这是解决方案的快速而肮脏的途径)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Java程序中保存数据

来自分类Dev

如何在SharedPreferences中保存arrayList数据?

来自分类Dev

如何在C中保存/检索数据?

来自分类Dev

如何在R中保存数据帧

来自分类Dev

如何在python(pandas)中保存数据

来自分类Dev

如何在Imageview src中保存数据?

来自分类Dev

如何在cakePHP中保存此数据?

来自分类Dev

Laravel如何在forloop中保存数据

来自分类Dev

如何在Android中保存数据?

来自分类Dev

如何在 TableView 中保存数据?

来自分类Dev

如何在ios中的Plist文件中保存,检索,删除和更新我的数据?

来自分类Dev

如何在Firebase中保存的数据下构造数据

来自分类Dev

如何在iOS 6中的CoreData中保存数组的内容

来自分类Dev

如何在iOS应用中保存用户头像

来自分类Dev

如何在MySQL数据库中保存ckeditor内容

来自分类Dev

如何在应用程序中保存数据?

来自分类Dev

如何在领域中保存和加载数据

来自分类Dev

如何在数据库中保存图像路径

来自分类Dev

如何在数据库中保存特殊字符

来自分类Dev

如何在Heroku的Rails中保存少量数据

来自分类Dev

如何在数据库中保存PictureBox图像

来自分类Dev

如何在ng-grid中保存数据?

来自分类Dev

如何在WinForms中保存表单关闭事件的数据

来自分类Dev

如何在数据库中保存文件路径?

来自分类Dev

如何在数据库中保存用户的位置

来自分类Dev

PHP对象编程如何在MYSQL中保存数据

来自分类Dev

如何在SQL数据库中保存列表?

来自分类Dev

如何在数据库中保存多个图像?

来自分类Dev

如何在Firebase数据库中保存对象?