如何在iOS中保存数据

我在做一个游戏,当我closures应用程序(closures多任务pipe理器),我的所有数据都没有了! 所以,我的问题很简单: 如何保存数据?

假设您要保存分数和级别,这是一个名为dataHolder的对象的属性。

DataHolder可以创build为单例,因此您不必过多地关心访问它(实际上是它的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 (这通常是解决scheme的快捷方式)。

[NSUserDefaults standardUserDefaults]适用于less量数据,如用户设置和首选项。 通常情况下,您可以使用它来使用户能够保存定义全局值的各种数据,如字符首选项,武器首选项等等。

对于较大数量的数据,如游戏级别的细节或成就或武器库存等。您将需要使用像核心数据的东西。 这是一个更正式的数据库,可以在数据模式更改时轻松迁移。 请参阅这里的文档: 核心数据和核心数据编程指南

您可以将数据保存在CoreData,SqlLite或NSUserDefaults中Update Realm也是一个选项,非常容易实现。

我build议使用Realm来获得更一般化的解决scheme。

Swift 3

使用UserDefaults

 UserDefaults.standard.set(„some value”, „key”) let value = UserDefaults.standard.string(„key”) 

你甚至可以使用这个持久化数组