2017-08-01 28 views
1

enter image description here嗨,我試圖在Userdefaults中保存數據,但是每當我運行該應用程序的頁面時,我都會看到線程1:EXC_BAD_INSTRUCTION(code = EXC_I386_INVOC)圖片。線程1:在UserDefaults中編碼數據時出現EXC_BAD_INSTRUCTION

在此之前,我正在獲取與我現在正在獲取它的那一行下面的行相同的確切錯誤,但是現在它正在圖像中看到的當前行上。每當應用啓動時,我如何解決這個問題以保存我的數據?

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! 

底下:

 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() 
     } 
+0

你可以顯示代碼,你用來存儲在你的值serDefaults –

+0

**從不**使用'valueForKey'和'UserDefaults'。對於標量類型,有一些方便的方法:'''''''''''''''' 。使用原生Swift'Int'類型 – vadian

回答

1

嘗試使用

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

其轉換返回值給一個NSInteger。如果該值是一個NSNumber,則將返回-integerValue的結果。如果該值是一個NSString,則它將在可能的情況下轉換爲NSInteger。如果該值不存在或無法轉換爲整數,則返回0。所以不需要轉換你的部分。

此外,同時設置使用

defaults.set(highScore, forKey: "Add1High") 
+0

工作!謝謝! – Ajp

0

雨燕3.0的代碼

此代碼的工作parfect ..

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

使用此功能來檢查您的userdefaults值退出或不

let defaults = UserDefaults.standard 

    if defaults.value(forKey: "Add1High") != nil{ 

     highScore = defaults.value(forKey: "Add1High") as! NSInteger! 

    } 


    if defaults.value(forKey: "bronzeStatus") != nil{ 

     bronzeStatus = defaults.value(forKey: "bronzeStatus") as! NSInteger! 

    } 

因爲你條件
如果correctNumber>高分{}

所以這部分可以執行或可能不,所以你必須檢查

相關問題