teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

9

訂正

2020/08/30 03:56

投稿

samson66
samson66

スコア35

title CHANGED
File without changes
body CHANGED
@@ -2,7 +2,7 @@
2
2
  textfieldから入力した文字を**tablview**にTODOリストの様に表示させ、
3
3
  最終的には投稿時間やタグなど他の情報も扱えるように**配列を含んだ構造体**にし、
4
4
  さらに**userDefaultsなどで保存機能**を持たせようとコードを書き換えてみたのですが、
5
- 保存機能はついたものの一行だけしか保存されなかったりとうまくいかず、
5
+ 保存機能はついたものの**一行だけしか保存されなかったり**とうまくいかず、
6
6
  他に先行例を検索してみても見つからなかったのでこちらで質問しました。
7
7
 
8
8
  **質問**
@@ -53,7 +53,7 @@
53
53
  ```
54
54
 
55
55
  **8/30 追記**
56
- [似たような質問](https://teratail.com/questions/36813)の回答を下に自分なりに修正してみたのですが、またしても配列に一行しかappendされないという事象が起き、
56
+ [似たような質問](https://teratail.com/questions/36813)の回答を下に自分なりに修正してみたのですが、またしても**配列に一行しかappendされない**という事象が起き、
57
57
  保存はうまくいっても、配列として保存ができないという結果です。
58
58
  ```ここに言語を入力
59
59
  import UIKit

8

追加

2020/08/30 03:56

投稿

samson66
samson66

スコア35

title CHANGED
File without changes
body CHANGED
@@ -50,4 +50,104 @@
50
50
  return cell
51
51
  }
52
52
  }
53
+ ```
54
+
55
+ **8/30 追記**
56
+ [似たような質問](https://teratail.com/questions/36813)の回答を下に自分なりに修正してみたのですが、またしても配列に一行しかappendされないという事象が起き、
57
+ 保存はうまくいっても、配列として保存ができないという結果です。
58
+ ```ここに言語を入力
59
+ import UIKit
60
+
61
+ struct Plan : Codable{
62
+ let doing: String
63
+ //イニシャライザ
64
+ init(doing: String) {
65
+ self.doing = doing
66
+ }
67
+ }
68
+
69
+ class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
70
+ //tableviewに表示させるスケジュールリスト
71
+ var todo = [Plan]()
72
+
73
+ var readArray = [Plan]()
74
+
75
+
76
+
77
+ @IBOutlet weak var textfield: UITextField!
78
+ @IBOutlet weak var table: UITableView!
79
+
80
+
81
+
82
+
83
+
84
+ override func viewDidLoad() {
85
+ super.viewDidLoad()
86
+ // Do any additional setup after loading the view.
87
+ table.dataSource = self
88
+ table.delegate = self
89
+
90
+ readArray = Plan.readGoals()
91
+
92
+
93
+
94
+ }
95
+
96
+ @IBAction func add(_ sender: Any) {
97
+ let mozi = textfield.text!
98
+ //todo.append(Plan(doing: mozi))
99
+
100
+ var saveArray: [Plan] = []
101
+ saveArray.append(Plan(doing: mozi))
102
+
103
+ // goal配列をUserDefaultsに保存
104
+ Plan.saveGoals(Plan: saveArray)
105
+ table.reloadData()
106
+
107
+
108
+
109
+ print(readArray[0].doing) //ここまでは保存されているようです
110
+ print(readArray[1].doing) //わずか2個目からThread 1: Fatal error: Index out of rangeという警告文がつきました。
111
+ print(readArray[2].doing)
112
+ }
113
+
114
+
115
+
116
+
117
+ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
118
+ let readArray = Plan.readGoals()
119
+ let aaa = readArray
120
+ return aaa.count
121
+ }
122
+
123
+ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
124
+
125
+
126
+
127
+
128
+ let plan = readArray[indexPath.row]
129
+ let cell = tableView.dequeueReusableCell(withIdentifier: "Cell",for: indexPath)
130
+ cell.textLabel?.text = plan.doing
131
+ return cell
132
+ }
133
+
134
+ }
135
+
136
+ extension Plan {
137
+ static let userDefaultGoalKey = "goalSaveKey"
138
+
139
+ static func saveGoals(Plan: [Plan]) {
140
+ let defaults = UserDefaults.standard
141
+ defaults.set(Plan.map{ $0.doing }, forKey: userDefaultGoalKey)
142
+ defaults.synchronize()
143
+ }
144
+
145
+ static func readGoals() -> [Plan] {
146
+ let defaults = UserDefaults.standard
147
+ if let goalArray = defaults.object(forKey: userDefaultGoalKey) as? [String] {
148
+ return goalArray.map{ Plan(doing: $0) }
149
+ }
150
+ return []
151
+ }
152
+ }
53
153
  ```

7

修正

2020/08/30 03:54

投稿

samson66
samson66

スコア35

title CHANGED
File without changes
body CHANGED
@@ -5,6 +5,7 @@
5
5
  保存機能はついたものの一行だけしか保存されなかったりとうまくいかず、
6
6
  他に先行例を検索してみても見つからなかったのでこちらで質問しました。
7
7
 
8
+ **質問**
8
9
  以下がuserDefaultsを加える前の状態のコードなのですが、
9
10
  **textfieldから構造体の配列に入れた文字**を保存する方法についてアドバイスお待ちしておりますm(_ _)m
10
11
  ```ここに言語を入力

6

修正

2020/08/29 05:31

投稿

samson66
samson66

スコア35

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,5 @@
1
1
  **実現したいこと・やったこと**
2
- textfieldから入力した文字を**tablview**にメモリストの様に表示させ、
2
+ textfieldから入力した文字を**tablview**にTODOリストの様に表示させ、
3
3
  最終的には投稿時間やタグなど他の情報も扱えるように**配列を含んだ構造体**にし、
4
4
  さらに**userDefaultsなどで保存機能**を持たせようとコードを書き換えてみたのですが、
5
5
  保存機能はついたものの一行だけしか保存されなかったりとうまくいかず、

5

修正

2020/08/29 05:29

投稿

samson66
samson66

スコア35

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,6 @@
1
1
  **実現したいこと・やったこと**
2
2
  textfieldから入力した文字を**tablview**にメモリストの様に表示させ、
3
- 最終的には投稿時間やタグなど他の情報も扱えるように配列を含んだ構造体にし、
3
+ 最終的には投稿時間やタグなど他の情報も扱えるように**配列を含んだ構造体**にし、
4
4
  さらに**userDefaultsなどで保存機能**を持たせようとコードを書き換えてみたのですが、
5
5
  保存機能はついたものの一行だけしか保存されなかったりとうまくいかず、
6
6
  他に先行例を検索してみても見つからなかったのでこちらで質問しました。

4

訂正

2020/08/29 05:28

投稿

samson66
samson66

スコア35

title CHANGED
@@ -1,1 +1,1 @@
1
- Swift 構造体を配列にしたものを保存させる方法について
1
+ Swift 構造体を配列にしたものを保存る方法について・tableview
body CHANGED
File without changes

3

訂正

2020/08/29 05:19

投稿

samson66
samson66

スコア35

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,5 @@
1
1
  **実現したいこと・やったこと**
2
- textfieldから入力した文字をtablviewにメモリストの様に表示させ、
2
+ textfieldから入力した文字を**tablview**にメモリストの様に表示させ、
3
3
  最終的には投稿時間やタグなど他の情報も扱えるように配列を含んだ構造体にし、
4
4
  さらに**userDefaultsなどで保存機能**を持たせようとコードを書き換えてみたのですが、
5
5
  保存機能はついたものの一行だけしか保存されなかったりとうまくいかず、

2

訂正

2020/08/29 05:16

投稿

samson66
samson66

スコア35

title CHANGED
@@ -1,1 +1,1 @@
1
- Swift 構造体を配列にしたものを保存させtableviewに表示する方法について
1
+ Swift 構造体を配列にしたものを保存させる方法について
body CHANGED
File without changes

1

訂正

2020/08/29 05:15

投稿

samson66
samson66

スコア35

title CHANGED
File without changes
body CHANGED
@@ -6,7 +6,7 @@
6
6
  他に先行例を検索してみても見つからなかったのでこちらで質問しました。
7
7
 
8
8
  以下がuserDefaultsを加える前の状態のコードなのですが、
9
- **textfieldから構造体の配列に入れた文字**を保存する方法する方法についてアドバイスお待ちしておりますm(_ _)m
9
+ **textfieldから構造体の配列に入れた文字**を保存する方法についてアドバイスお待ちしておりますm(_ _)m
10
10
  ```ここに言語を入力
11
11
  import UIKit
12
12