こんにちは。いつもありがとうございます。
UserDefaultに配列を保存してアプリを閉じてもデータが残るようにしたいのです。
下のaddItem関数内で保存しているのですが、アプリを閉じると消えてしまいます。何を間違ってますか?
わかる方おられましたらご教授ください。宜しくお願いします。
Swift
1 2 3 var items = [[String](),[String](),[String]()] 4 5 let ud = [UserDefaults.standard,UserDefaults.standard,UserDefaults.standard] 6 7 8 @IBAction func addItem(_ sender: Any) { 9 10//略 11 12 // save into memory 13 ud[fridgeSegOutlet.selectedSegmentIndex].set(items[fridgeSegOutlet.selectedSegmentIndex], forKey: String(fridgeSegOutlet.selectedSegmentIndex)) 14 15 self.textInput.resignFirstResponder() 16 }
全体のコードです
Swift
1 2import UIKit 3 4class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 5 6 @IBOutlet var textInput: UITextField! 7 @IBOutlet var table: UITableView! 8 9 10 //var fridgeItem = [String]() // this is going to init this array so i don't need to put anything in it. 11 //var freezerItem = [String]() 12 //var otherItem = [String]() 13 var items = [[String](),[String](),[String]()] 14 //Fridge, Freezer, Other 15 16 //refered:http://cabbalog.blogspot.com/2016/09/xcode8-swift3-nsuserdefaults.html 17 let ud = [UserDefaults.standard,UserDefaults.standard,UserDefaults.standard] 18 19 @IBOutlet var fridgeSegOutlet: UISegmentedControl! 20 @IBAction func fridgeSeg(_ sender: Any) { 21 //if ud[fridgeSegOutlet.selectedSegmentIndex].object(forKey: String(fridgeSegOutlet.selectedSegmentIndex)) != nil{ 22 //items[fridgeSegOutlet.selectedSegmentIndex] = ud[fridgeSegOutlet.selectedSegmentIndex].object(forKey: String(fridgeSegOutlet.selectedSegmentIndex)) as! [String] 23 //} 24 25 26 table.reloadData() 27 } 28 29 @IBAction func addItem(_ sender: Any) { 30 // Add item to list 31 if textInput.text != "" { 32 items[fridgeSegOutlet.selectedSegmentIndex].append(textInput.text!) 33 } 34 // Clear text input field 35 textInput.text = "" 36 37 // refresh table view 38 table.reloadData() 39 40 // save into memory 41 ud[fridgeSegOutlet.selectedSegmentIndex].set(items[fridgeSegOutlet.selectedSegmentIndex], forKey: String(fridgeSegOutlet.selectedSegmentIndex)) 42 self.textInput.resignFirstResponder() 43 } 44 45 override func viewDidLoad() { 46 super.viewDidLoad() 47 if ud[fridgeSegOutlet.selectedSegmentIndex].object(forKey: String(fridgeSegOutlet.selectedSegmentIndex)) != nil{ 48 //items[fridgeSegOutlet.selectedSegmentIndex] = ud[fridgeSegOutlet.selectedSegmentIndex].object(forKey: String(fridgeSegOutlet.selectedSegmentIndex)) as! [String] 49 } 50 //for index in 0...2{ 51 // ud[index].set(items[index], forKey: String(index)) 52 //} 53 } 54 55 public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ 56 57 return items[fridgeSegOutlet.selectedSegmentIndex].count 58 } 59 60 public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ 61 62 let cell = UITableViewCell(style: .default, reuseIdentifier: "Cell") 63 64 cell.textLabel?.text = items[fridgeSegOutlet.selectedSegmentIndex][indexPath.row] 65 66 return cell 67 68 } 69 70 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 71 if editingStyle == UITableViewCellEditingStyle.delete{ 72 items[fridgeSegOutlet.selectedSegmentIndex].remove(at: indexPath.row) 73 74 table.deleteRows(at: [indexPath], with: .automatic) 75 76 ud[fridgeSegOutlet.selectedSegmentIndex].object(forKey: String(fridgeSegOutlet.selectedSegmentIndex)) 77 } 78 } 79 80 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 81 self.view.endEditing(true) 82 } 83 84 override func didReceiveMemoryWarning() { 85 super.didReceiveMemoryWarning() 86 // Dispose of any resources that can be recreated. 87 } 88 89 90} 91 92

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。