2017-02-26 3 views
0

背景情報:このアプリケーションは色をスキャンし、ユーザーが希望する場合は色をUserDefaultsを使用しているUITableView。ここでの変数は、プログラムの初期に使用されたアルゴリズムの副産物です。swift 3で.append()を使用すると、配列の要素が新しい要素を取得する配列の代わりに置換されます

テーブルを見ると、新しい要素ではなく、保存した要素が置き換えられます。

これはコードですが、これをuserdefaultsに保存しようとしていますが、userdefaultsは問題ではないと思います。

これらはあらかじめ定義された配列です。彼らはクラスの一部ではありません。

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

これは、対応する配列に変数を追加してユーザーのデフォルト値に保存する関数です。これはViewControllerをクラス

@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

問題がsomething[]に配列たちを追加するよりも、あなたが定義部

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

にするたびに新しいリストを作成しているということです.appendを入力し、[something]をUserDefaultsに保存してください。これにより、デフォルトで保存された進行状況はすべて[something]に上書きされます。あなたは、ストレージのプロパティを正しく

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

このサンプルコードを初期化する必要があり、あなたの進行状況を保存するには

がUserDefaultsからNameListでの取得または何もデフォルトに保存されていない場合は、空の文字列の配列として、それを初期化します。すべてのリストでこのスニペットを使用します。お役に立てれば。

P.S. common naming conventionsによれば、名前リストなどの小文字で変数を指定する方が良いです。

関連する問題