使用管理器儲存和讀取資料

雖然你可以在任何地方使用 NSUserDefaults 方法,但有時可以更好地定義一個管理器,為你儲存和讀取 NSUserDefaults,然後使用該管理器讀取或寫入資料。

假設我們想將使用者的分數儲存到 NSUserDefaults 中。我們可以建立一個類似下面的類,它有兩種方法:setHighScorehighScore。在你想要訪問高分的任何地方,建立此類的例項。

迅速

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

優點是:

  1. 你的讀寫過程的實現只在一個地方,你可以隨時更改它(例如從 NSUserDefaults 切換到 Core Data),而不必擔心更改所有使用高分的地方。

  2. 當你想要訪問得分或寫入時,只需呼叫一種方法。

  3. 當你看到一個 bug 或類似的東西時,只需除錯它。

注意

如果你擔心同步,最好使用管理同步的單例類。