iOS Utiliser les gestionnaires pour enregistrer et lire des données


Exemple

Bien que vous puissiez utiliser les méthodes NSUserDefaults n'importe où, il est parfois préférable de définir un gestionnaire qui enregistre et lit à partir de NSUserDefaults , puis utilise ce gestionnaire pour lire ou écrire vos données.

Supposons que nous voulions enregistrer le score d'un utilisateur dans NSUserDefaults . Nous pouvons créer une classe comme celle ci-dessous qui a deux méthodes: setHighScore et highScore . Partout où vous voulez accéder aux meilleurs scores, créez une instance de cette classe.

Rapide

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;
            }
        }
    }
}

Objectif 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

Les avantages sont que:

  1. L'implémentation de votre processus de lecture et d'écriture est seulement à un endroit et vous pouvez le changer (par exemple passer de NSUserDefaults à Core Data) quand vous le voulez et ne pas vous soucier de changer tous les endroits avec lesquels vous travaillez.

  2. Appelez simplement une seule méthode lorsque vous souhaitez accéder au score ou l'écrire.

  3. Déboguez-le simplement quand vous voyez un bug ou quelque chose comme ça.

Remarque

Si vous vous inquiétez de la synchronisation, il est préférable d'utiliser une classe singleton qui gère la synchronisation.