質問編集履歴

9

訂正

2020/08/30 03:56

投稿

samson66
samson66

スコア35

test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  さらに**userDefaultsなどで保存機能**を持たせようとコードを書き換えてみたのですが、
8
8
 
9
- 保存機能はついたものの一行だけしか保存されなかったりとうまくいかず、
9
+ 保存機能はついたものの**一行だけしか保存されなかったり**とうまくいかず、
10
10
 
11
11
  他に先行例を検索してみても見つからなかったのでこちらで質問しました。
12
12
 
@@ -108,7 +108,7 @@
108
108
 
109
109
  **8/30 追記**
110
110
 
111
- [似たような質問](https://teratail.com/questions/36813)の回答を下に自分なりに修正してみたのですが、またしても配列に一行しかappendされないという事象が起き、
111
+ [似たような質問](https://teratail.com/questions/36813)の回答を下に自分なりに修正してみたのですが、またしても**配列に一行しかappendされない**という事象が起き、
112
112
 
113
113
  保存はうまくいっても、配列として保存ができないという結果です。
114
114
 

8

追加

2020/08/30 03:56

投稿

samson66
samson66

スコア35

test CHANGED
File without changes
test CHANGED
@@ -103,3 +103,203 @@
103
103
  }
104
104
 
105
105
  ```
106
+
107
+
108
+
109
+ **8/30 追記**
110
+
111
+ [似たような質問](https://teratail.com/questions/36813)の回答を下に自分なりに修正してみたのですが、またしても配列に一行しかappendされないという事象が起き、
112
+
113
+ 保存はうまくいっても、配列として保存ができないという結果です。
114
+
115
+ ```ここに言語を入力
116
+
117
+ import UIKit
118
+
119
+
120
+
121
+ struct Plan : Codable{
122
+
123
+ let doing: String
124
+
125
+ //イニシャライザ
126
+
127
+ init(doing: String) {
128
+
129
+ self.doing = doing
130
+
131
+ }
132
+
133
+ }
134
+
135
+
136
+
137
+ class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
138
+
139
+ //tableviewに表示させるスケジュールリスト
140
+
141
+ var todo = [Plan]()
142
+
143
+
144
+
145
+ var readArray = [Plan]()
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+ @IBOutlet weak var textfield: UITextField!
154
+
155
+ @IBOutlet weak var table: UITableView!
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+ override func viewDidLoad() {
168
+
169
+ super.viewDidLoad()
170
+
171
+ // Do any additional setup after loading the view.
172
+
173
+ table.dataSource = self
174
+
175
+ table.delegate = self
176
+
177
+
178
+
179
+ readArray = Plan.readGoals()
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+ }
188
+
189
+
190
+
191
+ @IBAction func add(_ sender: Any) {
192
+
193
+ let mozi = textfield.text!
194
+
195
+ //todo.append(Plan(doing: mozi))
196
+
197
+
198
+
199
+ var saveArray: [Plan] = []
200
+
201
+ saveArray.append(Plan(doing: mozi))
202
+
203
+
204
+
205
+ // goal配列をUserDefaultsに保存
206
+
207
+ Plan.saveGoals(Plan: saveArray)
208
+
209
+ table.reloadData()
210
+
211
+
212
+
213
+
214
+
215
+
216
+
217
+ print(readArray[0].doing) //ここまでは保存されているようです
218
+
219
+ print(readArray[1].doing) //わずか2個目からThread 1: Fatal error: Index out of rangeという警告文がつきました。
220
+
221
+ print(readArray[2].doing)
222
+
223
+ }
224
+
225
+
226
+
227
+
228
+
229
+
230
+
231
+
232
+
233
+ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
234
+
235
+ let readArray = Plan.readGoals()
236
+
237
+ let aaa = readArray
238
+
239
+ return aaa.count
240
+
241
+ }
242
+
243
+
244
+
245
+ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
246
+
247
+
248
+
249
+
250
+
251
+
252
+
253
+
254
+
255
+ let plan = readArray[indexPath.row]
256
+
257
+ let cell = tableView.dequeueReusableCell(withIdentifier: "Cell",for: indexPath)
258
+
259
+ cell.textLabel?.text = plan.doing
260
+
261
+ return cell
262
+
263
+ }
264
+
265
+
266
+
267
+ }
268
+
269
+
270
+
271
+ extension Plan {
272
+
273
+ static let userDefaultGoalKey = "goalSaveKey"
274
+
275
+
276
+
277
+ static func saveGoals(Plan: [Plan]) {
278
+
279
+ let defaults = UserDefaults.standard
280
+
281
+ defaults.set(Plan.map{ $0.doing }, forKey: userDefaultGoalKey)
282
+
283
+ defaults.synchronize()
284
+
285
+ }
286
+
287
+
288
+
289
+ static func readGoals() -> [Plan] {
290
+
291
+ let defaults = UserDefaults.standard
292
+
293
+ if let goalArray = defaults.object(forKey: userDefaultGoalKey) as? [String] {
294
+
295
+ return goalArray.map{ Plan(doing: $0) }
296
+
297
+ }
298
+
299
+ return []
300
+
301
+ }
302
+
303
+ }
304
+
305
+ ```

7

修正

2020/08/30 03:54

投稿

samson66
samson66

スコア35

test CHANGED
File without changes
test CHANGED
@@ -11,6 +11,8 @@
11
11
  他に先行例を検索してみても見つからなかったのでこちらで質問しました。
12
12
 
13
13
 
14
+
15
+ **質問**
14
16
 
15
17
  以下がuserDefaultsを加える前の状態のコードなのですが、
16
18
 

6

修正

2020/08/29 05:31

投稿

samson66
samson66

スコア35

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  **実現したいこと・やったこと**
2
2
 
3
- textfieldから入力した文字を**tablview**にメモリストの様に表示させ、
3
+ textfieldから入力した文字を**tablview**にTODOリストの様に表示させ、
4
4
 
5
5
  最終的には投稿時間やタグなど他の情報も扱えるように**配列を含んだ構造体**にし、
6
6
 

5

修正

2020/08/29 05:29

投稿

samson66
samson66

スコア35

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  textfieldから入力した文字を**tablview**にメモリストの様に表示させ、
4
4
 
5
- 最終的には投稿時間やタグなど他の情報も扱えるように配列を含んだ構造体にし、
5
+ 最終的には投稿時間やタグなど他の情報も扱えるように**配列を含んだ構造体**にし、
6
6
 
7
7
  さらに**userDefaultsなどで保存機能**を持たせようとコードを書き換えてみたのですが、
8
8
 

4

訂正

2020/08/29 05:28

投稿

samson66
samson66

スコア35

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

3

訂正

2020/08/29 05:19

投稿

samson66
samson66

スコア35

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  **実現したいこと・やったこと**
2
2
 
3
- textfieldから入力した文字をtablviewにメモリストの様に表示させ、
3
+ textfieldから入力した文字を**tablview**にメモリストの様に表示させ、
4
4
 
5
5
  最終的には投稿時間やタグなど他の情報も扱えるように配列を含んだ構造体にし、
6
6
 

2

訂正

2020/08/29 05:16

投稿

samson66
samson66

スコア35

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

1

訂正

2020/08/29 05:15

投稿

samson66
samson66

スコア35

test CHANGED
File without changes
test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  以下がuserDefaultsを加える前の状態のコードなのですが、
16
16
 
17
- **textfieldから構造体の配列に入れた文字**を保存する方法する方法についてアドバイスお待ちしておりますm(_ _)m
17
+ **textfieldから構造体の配列に入れた文字**を保存する方法についてアドバイスお待ちしておりますm(_ _)m
18
18
 
19
19
  ```ここに言語を入力
20
20