Swift 4,
pour enregistrer un tableau à l'utilisateur Defaul ts vous faire:
let defaults = UserDefaults.standard
let array = [25, 50]
defaults.set(array, forKey: "Scores")
Et pour accéder au tableau de valeurs par défaut de l'utilisateur:
let defaults = UserDefaults.standard
let retrievedArray = defaults.array(forKey: "Scores") as? [Int] ?? []
Et si vous deviez afficher un score de votre tableau dans une étiquette puis, vous simplement ne:
scoreLabel.text = String(describing: retrievedArray[0])
Si vous utilisez des entiers pour votre système de notation, je suggère vous stocker vos scores comme Int
dans les paramètres par défaut de l'utilisateur.
Si vous préférez utiliser Strings
cependant, s'il vous plaît noter que vous pouvez utiliser la méthode de stringArray(forKey:)
par défaut de l'utilisateur directement, au lieu de la méthode array(forKey:)
, et donc, dans ce cas, vous auriez pas besoin de taper jeté votre tableau :
let someStringArray = defaults.stringArray(forKey: "ArrayOfStrings")
note: pour répondre à votre question, je considérerai que vous utilisez des scores Int, mais ne hésitez pas à utiliser celui que vous préférez.
Si vous souhaitez enregistrer votre tableau à la même clé dans les paramètres par défaut de l'utilisateur chaque fois que vous obtenez une nouvelle partition, vous pouvez le faire facilement comme ceci:
let defaults = UserDefaults.standard
// Your new score:
let newScore = 75
// Get your current scores list from User Defaults:
var currentArray = defaults.array(forKey: "Scores") as? [Int] ?? []
// Append your new score to the current array:
let updatedArray = currentArray.append(newScore)
// And save your updated array to User Defaults:
defaults.set(updatedArray, forKey: "Scores")
// In this example, your User Defaults now contains the updated array [25, 50, 75]
et qu'il est:).
S'il vous plaît noter qu'il n'y a pas besoin d'utiliser une extension pour que ..
MISE À JOUR: Aussi, si vous voulez ajouter quelque chose à l'intérieur de votre méthode viewDidAppear
, ne pas oublier d'ajouter super.viewDidAppear(animated)
. La même chose vaut pour viewDidLoad
, etc.
Les documentation états:
Vous pouvez remplacer cette méthode pour effectuer des tâches supplémentaires associées de présenter le point de vue. Si vous remplacez cette méthode, vous devez appeler super à un certain moment dans votre implémentation.
Vous auriez:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if let retrievedArray = defaults.array(forKey: "Scores") as? [Int] {
print(retrievedArray)
// You can access your scores array safely here
}
}
Merci Milan pour l'aide, il est très apprécié! Quand je finis le jeu, il affiche "Label" au lieu de ce que l'étiquette dit par exemple 23.5 secondes, tout le reste est correct sauf que –
ce n'est pas le problème des UserDefaults .. très probablement c'est le problème quand vous définissez le texte de l'étiquette (et lorsque vous enregistrez les données dans UserDefaults). passez en revue votre code et essayez d'enregistrer les données dans les UserDefaults dès qu'elles sont disponibles, et actualisez l'étiquette à partir des UserDefaults dès que possible, lorsque l'étiquette est présentée. En fin de compte, vous n'avez même pas à le passer entre viewControllers, il suffit d'ajouter les valeurs à la fin, et dans le viewController avec le label utiliser les données de UserDefaults –
Ok merci, je vais vous dire comment je vais merci pour tout! –