Rok*_*arc 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
不要忘记在需要的地方#import"DataHolder.h",或者简单地把它放进去...-Prefix.pch
.
您可以在appDelegate
方法中执行实际加载和保存:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[[DataHolder sharedInstance] saveData];
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[[DataHolder sharedInstance] loadData];
}
Run Code Online (Sandbox Code Playgroud)
您可以从任何地方访问你的分数和级别的数据[DataHolder sharedInstance].score
和[DataHolder sharedInstance].level
.
这似乎是一个简单的任务矫枉过正,但它肯定有助于保持整洁,它可以帮助你避免保存所有的数据appDelegate
(通常是快速和肮脏的路径解决方案).
您可以在CoreData,SqlLite或NSUserDefaults中保存数据 更新 Realm也是一个选项并且非常容易实现.
归档时间: |
|
查看次数: |
23828 次 |
最近记录: |