2017-02-26 199 views
0

背景信息:此應用程序掃描一種顏色,然後,如果用戶想要將顏色保存到UITableView使用UserDefaults。這裏的變量是程序中較早使用的算法的副產品。在swift 3中使用.append()時,數組中的元素被替換而不是數組獲得新元素

當我查看錶格而不是新元素時,我保存的那個被替換。

這裏是代碼,我試圖將此保存到userdefaults,但我不認爲userdefaults是問題。這些是預定義的數組。他們不是班級的一部分。

var NameList = [String]() 
var HexCodeList = [String]() 
var RedList = [CGFloat]() 
var BlueList = [CGFloat]() 
var GreenList = [CGFloat]() 

這是將變量添加到相應數組並將其保存爲用戶默認值的函數。這是一個視圖控制器類的一部分

@IBAction func SaveColor(_ sender: Any) { 

    let alertController = UIAlertController(title: "Save Color", message: "Please name the color you would like to save:", preferredStyle: .alert) 

    let confirmAction = UIAlertAction(title: "Confirm", style: .default) { (_) in 
     if let field = alertController.textFields?[0] { 
      // store your data 
      //ColorList.append(Color(name: field.text!, hexCode: self.hexCode, Red: self.Red, Green: self.Green, Blue: self.Blue)) 
      //UserDefaults.standard.set(ColorList, forKey: "ColorList") 



      NameList.append(field.text!) 
      UserDefaults.standard.set(NameList, forKey: "NameList") 

      HexCodeList.append(self.hexCode) 
      UserDefaults.standard.set(HexCodeList, forKey: "HexCodeList") 

      RedList.append(self.Red) 
      UserDefaults.standard.set(RedList, forKey: "RedList") 

      GreenList.append(self.Green) 
      UserDefaults.standard.set(GreenList, forKey: "GreenList") 

      BlueList.append(self.Blue) 
      UserDefaults.standard.set(BlueList, forKey: "BlueList") 

      UserDefaults.standard.synchronize() 

      print("NameList - 2nd", NameList) 

     } else { 
      // user did not fill field 
     } 
    } 

我敢肯定,這就是一切的代碼,但如果你需要更多的幫助我,我會很樂意將它張貼所有

感謝很多

+0

你有沒有試過這個建議的答案? –

回答

1

的問題是,你是在定義部分

var NameList = [String]() // Nothing here! 

建立新名單,每次比增加something[]陣列我們.append,並將[something]保存到UserDefaults。這會覆蓋[something]默認值中保存的所有進度。

要保存你的進步,你需要初始化存儲性能正確

lazy var NameList: [String] = UserDefaults.standard.array(forKey: "NameList") as? [String] ?? [String]() 

此示例代碼檢索UserDefaults NameList中或者如果沒有保存到默認初始化爲空字符串數組。將這個片段與所有列表一起使用。希望這可以幫助。

P.S.根據common naming conventions最好給你的變量命名爲小寫字母,比如nameList等。

相關問題