回答編集履歴

5

1/9追記4

2019/01/09 06:19

投稿

hameji001
hameji001

スコア639

test CHANGED
@@ -232,7 +232,7 @@
232
232
 
233
233
  SaveViewController.swiftのviewDidLoad()もおかしいです。
234
234
 
235
- 記のコードを見て、順番・入る中身をよく考えて、またやってみてください。
235
+ この追記のコードを見て、順番・入る中身をよく考えて、またやってみてください。
236
236
 
237
237
  func内では基本上から下に順に処理されるんですよ。
238
238
 
@@ -242,7 +242,9 @@
242
242
 
243
243
 
244
244
 
245
+ また、エラーは理由が書いてある「Index out of range」ので、
246
+
245
- また、エラーは理由が書いあるので、日本語に訳して考えてください。
247
+ google翻訳でも駆使して、日本語に訳して考えてください。
246
248
 
247
249
  解決には、以前も書きましたが、
248
250
 
@@ -256,13 +258,15 @@
256
258
 
257
259
  ```
258
260
 
259
- で返ってくる個数を考えてください。
261
+ で返ってくる個数を考えて、何がおかしいのかを考えてください。
260
-
262
+
261
- わからなければ、print(Array2.count)で確認してください
263
+ わからなければ、print(Array2.count)で個数の確認もできます
262
-
264
+
265
+
266
+
263
- cellforRowatの取り出し方も、
267
+ cellforRowatの取り出し方も、データの構造、
264
-
268
+
265
- 順番・取り出し方を考えればわかるはずです。
269
+ 順番・取り出し方を考えればわかるはずです。
266
270
 
267
271
 
268
272
 

4

1/9追記3

2019/01/09 06:19

投稿

hameji001
hameji001

スコア639

test CHANGED
@@ -232,12 +232,16 @@
232
232
 
233
233
  SaveViewController.swiftのviewDidLoad()もおかしいです。
234
234
 
235
- 上記のコードを見て、また考えてやってみてください。
235
+ 上記のコードを見て、順番・入る中身をよく考えて、またやってみてください。
236
+
237
+ func内では基本上から下に順に処理されるんですよ。
236
238
 
237
239
 
238
240
 
239
241
  理解できれば、なぜprint(resultArray2)とprint(dateArray2)が空なのかわかると思います。
240
242
 
243
+
244
+
241
245
  また、エラーは理由が書いてあるので、日本語に訳して考えてください。
242
246
 
243
247
  解決には、以前も書きましたが、
@@ -255,3 +259,15 @@
255
259
  で返ってくる個数を考えてください。
256
260
 
257
261
  わからなければ、print(Array2.count)で確認してください。
262
+
263
+ cellforRowatの取り出し方も、
264
+
265
+ 順番・取り出し方を考えればわかるはずです。
266
+
267
+
268
+
269
+ そろそろ同じことを何度もやり取りするのは疲れてきました。
270
+
271
+ 答えは全て、このページに載っています。
272
+
273
+ よく全体を読んで、理解してください。

3

1/9追記2

2019/01/09 06:16

投稿

hameji001
hameji001

スコア639

test CHANGED
@@ -200,7 +200,7 @@
200
200
 
201
201
  /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
202
202
 
203
- 1/9追記
203
+ **1/9追記**
204
204
 
205
205
 
206
206
 
@@ -237,3 +237,21 @@
237
237
 
238
238
 
239
239
  理解できれば、なぜprint(resultArray2)とprint(dateArray2)が空なのかわかると思います。
240
+
241
+ また、エラーは理由が書いてあるので、日本語に訳して考えてください。
242
+
243
+ 解決には、以前も書きましたが、
244
+
245
+ ```Swift
246
+
247
+ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
248
+
249
+ return Array2.count
250
+
251
+ }
252
+
253
+ ```
254
+
255
+ で返ってくる個数を考えてください。
256
+
257
+ わからなければ、print(Array2.count)で確認してください。

2

1/9追記

2019/01/09 06:09

投稿

hameji001
hameji001

スコア639

test CHANGED
@@ -195,3 +195,45 @@
195
195
  これでArrayにまず初期データがきちんとできると思います。
196
196
 
197
197
  printで作ったあとは確認してくださいね。
198
+
199
+
200
+
201
+ /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
202
+
203
+ 1/9追記
204
+
205
+
206
+
207
+ ②がないと、過去のデータが読み込まれないので、
208
+
209
+ その都度、ボタンを押した時に入れた新しいもののみしか保存されません。
210
+
211
+ なので、永遠に1個しかデータは保存されません。
212
+
213
+
214
+
215
+ なので②は
216
+
217
+ ```Swift
218
+
219
+ self.resultArray1 = self.Array1[0] // Array1の要素0(resultArray1の保存したもの)をresultArray1に入れる
220
+
221
+ // Array1つまり、Userdefaultsから保存したものを取り出して、セットした配列ですよ!
222
+
223
+ self.dateArray1 = self.Array1[1] // Array1の要素1(dateArray1の保存したもの)をdateArray1に入れる
224
+
225
+ ```
226
+
227
+ と書けばいいです。
228
+
229
+
230
+
231
+ まだ理解していないみたいですね。
232
+
233
+ SaveViewController.swiftのviewDidLoad()もおかしいです。
234
+
235
+ 上記のコードを見て、また考えてやってみてください。
236
+
237
+
238
+
239
+ 理解できれば、なぜprint(resultArray2)とprint(dateArray2)が空なのかわかると思います。

1

追加回答

2019/01/09 06:06

投稿

hameji001
hameji001

スコア639

test CHANGED
@@ -43,3 +43,155 @@
43
43
  です。
44
44
 
45
45
  まずそこから直してみましょう。他のコードも見てみます。
46
+
47
+
48
+
49
+ **[以下追記 1/8]**
50
+
51
+ **/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/**
52
+
53
+
54
+
55
+ 保存のところのコードがやはりおかしいです。
56
+
57
+ 最初に見なくて申し訳なかったです。
58
+
59
+
60
+
61
+ ```Swift
62
+
63
+ @IBAction func record(_ sender: Any) {
64
+
65
+ //zikan、①dateArray1に日付をString型で追加保存
66
+
67
+ zikan()
68
+
69
+ //配列を取り出す ②もし過去のデータがあるなら、Array1に読み込む
70
+
71
+ if (UserDefaults.standard.object(forKey: "save") != nil) {
72
+
73
+ Array1 = UserDefaults.standard.object(forKey: "save") as! [String]
74
+
75
+ }
76
+
77
+ // ③resultArray1にStringを追加保存
78
+
79
+ resultArray1.append(countLabel2.text!)
80
+
81
+ /*//日付をdateArrayに入れる
82
+
83
+ dateArray1.append(sDate)*/
84
+
85
+ // ④userdefaultsに再度保存
86
+
87
+ UserDefaults.standard.set(Array1, forKey: "save")
88
+
89
+ }
90
+
91
+
92
+
93
+ func zikan() {
94
+
95
+ //日付のフォーマットを指定する
96
+
97
+ let format = DateFormatter()
98
+
99
+ format.dateFormat = DateFormatter.dateFormat(fromTemplate: "yMdkHm", options: 0, locale: Locale(identifier: "ja_JP"))
100
+
101
+ //日付をStringに変換する
102
+
103
+ let sDate = format.string(from: date)
104
+
105
+ //日付をdateArrayに入れる
106
+
107
+ dateArray1.append(sDate)
108
+
109
+ }
110
+
111
+
112
+
113
+ ```
114
+
115
+
116
+
117
+ func zikan()に関してはまぁ、置いといて、
118
+
119
+ @IBOutlet func record() {}に関してですが、
120
+
121
+ 追加記入した、順番と行なっていることを考えてください。
122
+
123
+ ①dateArray1に日付(String型)を追加保存
124
+
125
+ ②もし過去のデータがあるなら、Array1に読み込む
126
+
127
+ ③resultArray1にStringを追加保存
128
+
129
+ ④userdefaultsにArray1を再度保存
130
+
131
+
132
+
133
+ データ構造と共に加味すると、
134
+
135
+ ```Swift
136
+
137
+ var resultArray1 = [String]()
138
+
139
+ var dateArray1 = [String]()
140
+
141
+ var Array1 = [resultArray1,dateArray1]
142
+
143
+ ```
144
+
145
+
146
+
147
+ resultArray1, dateArray1共に、空配列から始まる
148
+
149
+  (。。。viewdidLoadで読み込んでたらごめんなさい。)
150
+
151
+ まず、dateArray1に押した時の日付が保存される。
152
+
153
+ Array1にUserDefaultsから過去のデータが入る
154
+
155
+ dateArray1にStringを追加保存する
156
+
157
+ UserDefaultsにArray1を再度保存している。
158
+
159
+
160
+
161
+ の流れ、なので、よく見てもらえると、
162
+
163
+ Array1は他のdateArray1やresultArray1とやり取りを何もしていません。
164
+
165
+ これではArray1に何かデータが入るはずがありません。
166
+
167
+ なので、何も保存されないのです。
168
+
169
+
170
+
171
+ 正しい流れは、まず、何と言っても
172
+
173
+
174
+
175
+ ①過去データがあれば読み込む
176
+
177
+ userdefaults->Array1
178
+
179
+ ②Array1の中身を分解し、追加できるようにセットする
180
+
181
+ Array1 -> dateArray1とresultArray1に挿入。
182
+
183
+ ③それぞれのdateArray1とresultArray1にデータを追加
184
+
185
+ ④新規データが追加されたdateArray1とresultArray1を再びArray1にセット(戻す)
186
+
187
+ ⑤Array1を永続させるためにUserdefaultsに上書きする
188
+
189
+ (⑥printでArray1の中身を確認する)
190
+
191
+
192
+
193
+ です。
194
+
195
+ これでArrayにまず初期データがきちんとできると思います。
196
+
197
+ printで作ったあとは確認してくださいね。