###前提・実現したいこと
メモアプリの実装
nsuserdefaultsを使い array型に保存したString型のviewDidLoadで全てUITableViewのセルに表示させたい
###発生している問題・エラーメッセージ
一旦アプリを落としシミュレータで再起動をするとnsuserdefaultsに保存された文字列がUITableViewのセルに一つしか出てこない。
viewDidLoadした際、ログには配列に保存したそれぞれの文字列が表示されるのですが、セルに出てきません
nsuserdefaultsを使い array型に保存したString型のviewDidLoadでUITableViewのセルに全て表示させたい
理想は下記のようにviewDidLoadで保存した全ての文字列をセルに表示させる
###該当のソースコード
Swift
1 2 3 4 5import UIKit 6 7private let unselectedRow = 10 8//unselectedRowってなに -1ってなに 9//番号変えても変化はなし 10 11 12 13class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate { 14 15 16 17 var memoList: [String] = ([] as NSArray) as! [String] 18 var editRow: Int = unselectedRow 19 //private let unselectedRowを代入してる 20 21 22 @IBOutlet weak var editMemoFild: UITextField! 23 24 25 @IBAction func tapSubmitBtn(_ sender: AnyObject) { 26 27 applyMemo() 28 29 30 } 31 32 33 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 34 return memoList.count 35 } 36 37 38 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 39 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath) 40 if indexPath.row >= memoList.count { 41 return cell 42 } 43 44 cell.textLabel?.text = memoList[indexPath.row] 45 return cell 46 } 47 48 49 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 50 if indexPath.row >= memoList.count { 51 return 52 } 53 editRow = indexPath.row 54 editMemoFild.text = memoList[editRow] 55 } 56 57 58 59 60 @IBOutlet weak var memoListView: UITableView! 61 62 override func viewDidLoad() { 63 super.viewDidLoad() 64 65 memoListView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell") 66 67 let saveMassage = UserDefaults.standard 68 // 変数saveMassageにUserDefaultsを代入 69 70 // キーがDataの値をとります 71 var saveMassageData : AnyObject! = saveMassage.object(forKey: "saveDataID") as AnyObject! 72 73 print(saveMassageData) 74 75 76 77 memoList.append(String(describing: memoList) as String) 78 79 80 81 82 } 83 84 override func didReceiveMemoryWarning() { 85 super.didReceiveMemoryWarning() 86 // Dispose of any resources that can be recreated. 87 } 88 89 90 91 func applyMemo() { 92 93 let saveMassage = UserDefaults.standard 94 // 変数saveMassageにUserDefaultsを代入 95 96 // キーsaveDataIDに「editMemoFild.text」という値を格納。(idは任意の文字列でok) 97 saveMassage.set(memoList, forKey: "saveDataID") 98 99 100 // キーがDataの値をとります 101 var saveMassageData : AnyObject! = saveMassage.object(forKey: "saveDataID") as AnyObject! 102 103 print(saveMassageData) 104 105 106 if editMemoFild.text == "" { 107 print("saveMassageDataの値は空っぽだ") 108 return 109 } 110 111 if editRow == unselectedRow { 112 memoList.append(editMemoFild.text!) 113 print(unselectedRow) 114 115 116 } else { 117 memoList[editRow] += editMemoFild.text! 118 } 119 editMemoFild.text = "" 120 editRow = unselectedRow 121 memoListView.reloadData() 122 123 } 124 125} 126 127 128
###試したこと
文字列が保存される変数をarray型に変換してみたりしましたがうまく行きません
###補足情報(言語/FW/ツール等のバージョンなど)
GithBuに全ソースあり
https://github.com/Ryosuke-Hujisawa/NSUserDefaults-Deomo-iOS
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。