entrez la description de l'image ici Bonjour, j'essaie d'enregistrer des données dans Userdefaults, mais chaque fois que je lance cette page de l'application, j'obtiens le fil 1: EXC_BAD_INSTRUCTION (code = EXC_I386_INVOC) comme indiqué dans l'image.

Avant cela, j'obtenais exactement la même erreur sur la ligne sous celle sur laquelle je l'obtiens en ce moment, mais maintenant elle arrive sur cette ligne actuelle comme on le voit dans l'image. Comment puis-je résoudre ce problème pour enregistrer mes données à chaque lancement de l'application?

var highScore = 0
var bronzeStatus = 0

ViewDidLoad:

    let defaults = UserDefaults.standard
    highScore = defaults.value(forKey: "Add1High") as! NSInteger!
    bronzeStatus = defaults.value(forKey: "bronzeMed") as! NSInteger!

Sous:

        if correctNumber > highScore {
            highScore = correctNumber
            let defaults = UserDefaults.standard
            defaults.setValue(highScore, forKey: "Add1High")
            defaults.synchronize()
        }


        if highScore >= 15 {
        let defaults = UserDefaults.standard
            let bronzeAlert = UIAlertController(title: "New Medal!", message: "You earned a bronze medal!", preferredStyle: UIAlertControllerStyle.alert)
            bronzeAlert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))

            self.present(scoreAlert, animated: true, completion: nil)
        bronzeStatus = 1
        defaults.setValue(bronzeStatus, forKey: "bronzeMed")
        defaults.synchronize()
        }
1
Ajp 1 août 2017 à 08:58

2 réponses

Meilleure réponse

Essayez d'utiliser

highScore =  defaults.integer(forKey: "Add1High")

Il convertit la valeur renvoyée en NSInteger. Si la valeur est un NSNumber, le résultat de -integerValue sera renvoyé. Si la valeur est une NSString, elle sera convertie en NSInteger si possible. Si la valeur est absente ou ne peut pas être convertie en entier, 0 sera renvoyé. Donc pas besoin de convertir de votre part.

Aussi lors du réglage de l'utilisation

defaults.set(highScore, forKey: "Add1High")
2
Mohammad Sadiq 1 août 2017 à 06:09

Code Swift 3.0

ce code fonctionne parfaitement.

 var highScore = 0
 var bronzeStatus = 0

ViewDidLoad:

        //set integer type data
        UserDefaults.standard.set(20, forKey: "Add1High")
        UserDefaults.standard.set(30, forKey: "bronzeMed")

        //Get integer type data
        let defaults = UserDefaults.standard
        highScore = defaults.integer(forKey: "Add1High")
        bronzeStatus = defaults.integer(forKey: "bronzeMed")

        print("\(highScore)\(bronzeStatus)") //2030
0
Arjun Yadav 1 août 2017 à 06:39