質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

1回答

2056閲覧

メモアプリの実装、viewDidLoadでUITableViewのセルに保存したデータを表示させたい

keys

総合スコア215

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/11/07 02:38

編集2016/11/07 02:44

###前提・実現したいこと

メモアプリの実装

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ポイント箇所はコメントに「???」、「★★★」を入れときました

swift

1import UIKit 2 3private let unselectedRow = 10 4//unselectedRowってなに -1ってなに 5//番号変えても変化はなし 6 7 8 9class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate { 10 11 12 13 var memoList: [String] = ([] as NSArray) as! [String] 14 var editRow: Int = unselectedRow 15 //private let unselectedRowを代入してる 16 17 18 @IBOutlet weak var editMemoFild: UITextField! 19 20 21 @IBAction func tapSubmitBtn(_ sender: AnyObject) { 22 23 applyMemo() 24 25 26 } 27 28 29 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 30 return memoList.count 31 } 32 33 34 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 35 36 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath) 37 if indexPath.row >= memoList.count { 38 return cell 39 } 40 41 cell.textLabel!.text = memoList[indexPath.row] 42 return cell 43 } 44 45 46 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 47 if indexPath.row >= memoList.count { 48 return 49 } 50 editRow = indexPath.row 51 editMemoFild.text = memoList[editRow] 52 } 53 54 55 @IBOutlet weak var memoListView: UITableView! 56 57 override func viewDidLoad() { 58 super.viewDidLoad() 59 60 memoListView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell") 61 62 let saveMassage = UserDefaults.standard 63 // 変数saveMassageにUserDefaultsを代入 64 65 // ★★★ 初回起動時、これがないとアクセス時にnilでコケる(printでコケた) 66 saveMassage.register(defaults: ["saveDataID":[]]) 67 68 // キーがDataの値をとります 69 //??? var saveMassageData : AnyObject! = saveMassage.object(forKey: "saveDataID") as AnyObject! 70 let saveMassageData = saveMassage.object(forKey: "saveDataID") as! [String] 71 72 //??? memoList.append(String(describing: memoList) as String) 73 memoList = saveMassage.object(forKey: "saveDataID") as! [String] 74 75 print(saveMassageData) 76 } 77 78 override func didReceiveMemoryWarning() { 79 super.didReceiveMemoryWarning() 80 // Dispose of any resources that can be recreated. 81 } 82 83 84 85 func applyMemo() { 86 87 let saveMassage = UserDefaults.standard 88 // 変数saveMassageにUserDefaultsを代入 89 90 // キーsaveDataIDに「editMemoFild.text」という値を格納。(idは任意の文字列でok) 91 //saveMassage.set(memoList, forKey: "saveDataID") 92 93 94 // キーがDataの値をとります 95 //??? var saveMassageData : AnyObject! = saveMassage.object(forKey: "saveDataID") as AnyObject! 96 let saveMassageData = saveMassage.object(forKey: "saveDataID") as! [String] 97 98 print(saveMassageData) 99 100 if editMemoFild.text == "" { 101 print("saveMassageDataの値は空っぽだ") 102 return 103 } 104 105 if editRow == unselectedRow { 106 memoList.append(editMemoFild.text!) 107 108 // ★★★ 109 saveMassage.set(memoList, forKey: "saveDataID") 110 saveMassage.synchronize() 111 112 print(unselectedRow) 113 114 115 } else { 116 memoList[editRow] += editMemoFild.text! 117 } 118 editMemoFild.text = "" 119 editRow = unselectedRow 120 121 memoListView.reloadData() 122 123 } 124 125} 126 127

投稿2016/11/07 04:21

fromageblanc

総合スコア2724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問