使用管理器儲存和讀取資料
雖然你可以在任何地方使用 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 或類似的東西時,只需除錯它。
注意
如果你擔心同步,最好使用管理同步的單例類。