我正在做一个游戏,当我关闭应用程序(在多任务管理器中关闭)时,我所有的数据都消失了!因此,我的问题很简单:如何保存数据?
假设您要保存得分和级别,它们都是名为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] 删除。
我来说两句