使用管理器保存和读取数据
虽然你可以在任何地方使用 NSUserDefaults
方法,但有时可以更好地定义一个管理器,为你保存和读取 NSUserDefaults
,然后使用该管理器读取或写入数据。
假设我们想将用户的分数保存到 NSUserDefaults
中。我们可以创建一个类似下面的类,它有两种方法:setHighScore
和 highScore
。在你想要访问高分的任何地方,创建此类的实例。
迅速
public class ScoreManager: NSObject {
let highScoreDefaultKey = "HighScoreDefaultKey"
var highScore = {
set {
// This method includes your implementation for saving the high score
// You can use NSUserDefaults or any other data store like CoreData or
// SQLite etc.
NSUserDefaults.standardUserDefaults().setInteger(newValue, forKey: highScoreDefaultKey)
NSUserDefaults.standardUserDefaults().synchronize()
}
get {
//This method includes your implementation for reading the high score
let score = NSUserDefaults.standardUserDefaults().objectForKey(highScoreDefaultKey)
if (score != nil) {
return score.integerValue;
} else {
//No high score available, so return -1
return -1;
}
}
}
}
Objective-C
#import "ScoreManager.h"
#define HIGHSCRORE_KEY @"highScore"
@implementation ScoreManager
- (void)setHighScore:(NSUInteger) highScore {
// This method includes your implementation for saving the high score
// You can use NSUserDefaults or any other data store like CoreData or
// SQLite etc.
[[NSUserDefaults standardUserDefaults] setInteger:highScore forKey:HIGHSCRORE_KEY];
[[NSUserDefaults standardUserDefaults] synchronize];
}
- (NSInteger)highScore
{
//This method includes your implementation for reading the high score
NSNumber *highScore = [[NSUserDefaults standardUserDefaults] objectForKey:HIGHSCRORE_KEY];
if (highScore) {
return highScore.integerValue;
}else
{
//No high score available, so return -1
return -1;
}
}
@end
优点是:
-
你的读写过程的实现只在一个地方,你可以随时更改它(例如从
NSUserDefaults
切换到 Core Data),而不必担心更改所有使用高分的地方。 -
当你想要访问得分或写入时,只需调用一种方法。
-
当你看到一个 bug 或类似的东西时,只需调试它。
注意
如果你担心同步,最好使用管理同步的单例类。