質問編集履歴

5

修正

2019/01/09 09:23

投稿

hahum
hahum

スコア65

test CHANGED
@@ -1 +1 @@
1
- cannot use instance member '配列名' within property initializer;と追記
1
+ Thread 1: signal SIGABRT
test CHANGED
@@ -1,165 +1,419 @@
1
+ 追記 1/9
2
+
3
+
4
+
5
+ himeji001さんのアドバイス通りやってみたところ
6
+
7
+ Array1には回数の入ったresultArray1と日付が入ったdateArray1を入れることが出来ました。
8
+
9
+
10
+
1
- ボタンを押たときにViewControllerの値をUserDefautsの保存して次の画面のTableViewControllerに記録として残し同時TableViewのセルのSubtitleにそ時の時間つけたいのです、以下のようなエラーがてしいます
11
+ かしSaveViewControllerのViewDidLoadで,取り出しArray2代入して、cellForRowAtresultArray2とdateArray2IndexPath.row表示させることまだせん(Thread 1: Fatal error: Index out of range)
12
+
13
+ そもそも、Array2 = [resultArray2, dateArray2]なのでArray2[IndexPath.row]はわかりますが、その中の配列resultArray2、dateArray2に[IndexPath.row]は使えないですよね。それぞれ新しく更新されたデータをcellForRowAtで
14
+
15
+ cell.textLabel!.text (resultArray2の値)
16
+
17
+ cell.detailTextLabel!.text(dateArray2の値)
18
+
19
+ を入れる方法はありますでしょうか。
20
+
21
+ あと、ViewWillAppearはreloaddataだけでいいのか教えていただきたいです。
22
+
23
+
24
+
25
+ そしてスッキリした分かりやすいコードを書くために些細なことでもいいのでアドバイスいただけたら幸いです。
26
+
27
+
28
+
29
+
2
30
 
3
31
 
4
32
 
5
33
  ResultViewController.swift
6
34
 
35
+
36
+
37
+ ```Swift
38
+
39
+
40
+
41
+ var resultArray1 = [String]()
42
+
43
+
44
+
45
+ var dateArray1 = [String]()
46
+
47
+
48
+
49
+ var Array1: [[String]] = []
50
+
51
+
52
+
53
+ var date = Date()
54
+
55
+
56
+
57
+
58
+
59
+ ...
60
+
61
+ ...
62
+
63
+ ...
64
+
65
+
66
+
67
+ @IBAction func record(_ sender: Any) {
68
+
69
+
70
+
71
+ //配列を取り出す
72
+
73
+ if (UserDefaults.standard.object(forKey: "save") != nil) {
74
+
75
+ Array1 = UserDefaults.standard.object(forKey: "save") as! [[String]]
76
+
77
+
78
+
79
+ }
80
+
81
+
82
+
83
+
84
+
85
+ //zikanを呼び出す
86
+
87
+ zikan()
88
+
89
+ //resultArrayに回数を追加
90
+
91
+ resultArray1.append(countLabel2.text!)
92
+
93
+
94
+
95
+ Array1 = [resultArray1, dateArray1]
96
+
97
+
98
+
99
+ UserDefaults.standard.set(Array1, forKey: "save")
100
+
101
+
102
+
103
+ print(Array1.description)
104
+
105
+ print(resultArray1.description)
106
+
107
+ print(dateArray1.description)
108
+
109
+ }
110
+
111
+
112
+
113
+
114
+
115
+ func zikan() {
116
+
117
+ //日付のフォーマットを指定する
118
+
119
+ let format = DateFormatter()
120
+
7
- cannot use instance member 'resultArray1' within property initializer; property initializers run before 'self' is available
121
+ format.dateFormat = DateFormatter.dateFormat(fromTemplate: "yMdkHm", options: 0, locale: Locale(identifier: "ja_JP"))
122
+
123
+
124
+
125
+ //日付をStringに変換する
126
+
127
+ let sDate = format.string(from: date)
128
+
129
+ //日付をdateArrayに入れる
130
+
131
+ dateArray1.append(sDate)
132
+
133
+ }
134
+
135
+ ```
136
+
137
+
8
138
 
9
139
 
10
140
 
11
141
  SaveViewController.swift
12
142
 
13
- cannot use instance member 'resultArray2' within property initializer; property initializers run before 'self' is available
143
+
14
-
15
-
16
-
17
- ...
18
-
19
- ...
20
-
21
- ...
22
-
23
- ResultViewController.swift
24
144
 
25
145
  ```swift
26
146
 
27
- var resultArray1 = [String]()
28
-
29
-
30
-
31
- var dateArray1 = [String]()
32
-
33
-
34
-
35
- var Array1 = [resultArray1,dateArray1]
36
-
37
-
38
-
39
- var date = Date()
40
-
41
-
42
-
43
- ...
44
-
45
- ...
46
-
47
- ...
48
-
49
-
50
-
51
-
52
-
53
-
54
-
55
- @IBAction func record(_ sender: Any) {
56
-
57
-
58
-
59
- //zikanを呼び出す
60
-
61
- zikan()
62
-
63
-
64
-
65
- //配列を取り出す
66
-
67
- if (UserDefaults.standard.object(forKey: "save") != nil) {
68
-
69
- Array1 = UserDefaults.standard.object(forKey: "save") as! [String]
70
-
71
- }
72
-
73
-
74
-
75
-
76
-
77
-
78
-
79
- resultArray1.append(countLabel2.text!)
80
-
81
- /*//日付をdateArrayに入れる
82
-
83
- dateArray1.append(sDate)*/
84
-
85
- UserDefaults.standard.set(Array1, forKey: "save")
86
-
87
- }
88
-
89
-
90
-
91
- func zikan() {
92
-
93
- //日付のフォーマットを指定する
94
-
95
- let format = DateFormatter()
96
-
97
- format.dateFormat = DateFormatter.dateFormat(fromTemplate: "yMdkHm", options: 0, locale: Locale(identifier: "ja_JP"))
98
-
99
-
100
-
101
- //日付をStringに変換する
102
-
103
- let sDate = format.string(from: date)
104
-
105
-
106
-
107
- //日付をdateArrayに入れる
108
-
109
- dateArray1.append(sDate)
110
-
111
- }
147
+ var resultArray2 = [String]()
148
+
149
+
150
+
151
+ var dateArray2 = [String]()
152
+
153
+
154
+
155
+ var Array2: [[String]] = []
156
+
157
+
158
+
159
+ ...
160
+
161
+ ...
162
+
163
+ ...
164
+
165
+
166
+
167
+
168
+
169
+ override func viewDidLoad() {
170
+
171
+ super.viewDidLoad()
172
+
173
+
174
+
175
+ tableView.delegate = self
176
+
177
+ tableView.dataSource = self
178
+
179
+
180
+
181
+ //Array2にresultArray2とdateArray2を代入
182
+
183
+ Array2 = [resultArray2, dateArray2]
184
+
185
+
186
+
187
+ if UserDefaults.standard.object(forKey: "save") != nil {
188
+
189
+
190
+
191
+ Array2 = UserDefaults.standard.object(forKey: "save") as! [[String]]
192
+
193
+ }
194
+
195
+
196
+
197
+ print(resultArray2.description)
198
+
199
+ print(dateArray2.description)
200
+
201
+ print("Array2:", Array2.description)
202
+
203
+
204
+
205
+
206
+
207
+ }
208
+
209
+
210
+
211
+
212
+
213
+ override func viewWillAppear(_ animated: Bool) {
214
+
215
+ super.viewDidAppear(animated)
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+ tableView.reloadData()
224
+
225
+
226
+
227
+
228
+
229
+ }
230
+
231
+
232
+
233
+
234
+
235
+ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
236
+
237
+ return Array2.count
238
+
239
+ }
240
+
241
+
242
+
243
+ func numberOfSections(in tableView: UITableView) -> Int {
244
+
245
+ return 1
246
+
247
+ }
248
+
249
+
250
+
251
+ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
252
+
253
+ let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
254
+
255
+
256
+
257
+ cell.textLabel!.text = resultArray2[indexPath.row]
258
+
259
+ cell.detailTextLabel!.text = dateArray2[indexPath.row]
260
+
261
+
262
+
263
+ return cell
264
+
265
+ }
266
+
267
+
268
+
269
+ func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
270
+
271
+ return 40
272
+
273
+ }
274
+
275
+
276
+
277
+ func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
278
+
279
+
280
+
281
+ if editingStyle == .delete {
282
+
283
+ Array2.remove(at: indexPath.row)
284
+
285
+
286
+
287
+ UserDefaults.standard.set(Array2, forKey: "save")
288
+
289
+
290
+
291
+ tableView.reloadData()
292
+
293
+ }
294
+
295
+ }
296
+
297
+
112
298
 
113
299
  ```
114
300
 
115
301
 
116
302
 
117
- SaveViewController.swift
303
+ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
304
+
118
-
305
+ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
306
+
307
+ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
308
+
309
+
310
+
311
+ 追記1/9
312
+
313
+
314
+
315
+ Array2 = UserDefaults.standard.object(forKey: "save") as! [[String]]のところにThread 1: signal SIGABRTが発生する理由がわかりません。不必要なキャッシュは切ってあります。
316
+
317
+
318
+
319
+
320
+
321
+
322
+
119
- ```Swift
323
+ ```swift
324
+
325
+
120
326
 
121
327
  var resultArray2 = [String]()
122
328
 
329
+
330
+
123
331
  var dateArray2 = [String]()
124
332
 
125
333
 
126
334
 
335
+ var Array2: [[String]] = []
336
+
337
+
338
+
339
+
340
+
341
+ ...
342
+
343
+ ...
344
+
345
+ ...
346
+
347
+
348
+
349
+
350
+
351
+
352
+
353
+ override func viewDidLoad() {
354
+
355
+ super.viewDidLoad()
356
+
357
+
358
+
359
+ tableView.delegate = self
360
+
361
+ tableView.dataSource = self
362
+
363
+
364
+
365
+ if UserDefaults.standard.object(forKey: "save") != nil {
366
+
367
+
368
+
369
+ Array2 = UserDefaults.standard.object(forKey: "save") as! [[String]]
370
+
371
+ }
372
+
373
+
374
+
375
+
376
+
377
+ self.resultArray2 = self.Array2[0]
378
+
379
+ self.dateArray2 = self.Array2[1]
380
+
381
+
382
+
127
- var Array2 = [resultArray2, dateArray2]
383
+ Array2 = [resultArray2, dateArray2]
384
+
385
+
386
+
387
+
388
+
128
-
389
+ //Array2 = [ ["晴れ", "雨", "雪"],
390
+
391
+ //["2019/1/1", "2019/1/2", "2019/1/3"] ]
392
+
393
+
394
+
395
+ print("Array2:", Array2.description)
396
+
129
- //現在の日付を取得
397
+ print(resultArray2.description)
130
-
398
+
131
- let date = Date()
399
+ print(dateArray2.description)
132
-
133
-
134
-
400
+
401
+
402
+
135
- ....
403
+ }
136
-
137
- ....
404
+
138
-
139
- ....
405
+
140
-
141
-
142
-
406
+
407
+
408
+
143
- override func viewWillAppear(_ animated: Bool) {
409
+ override func viewWillAppear(_ animated: Bool) {
144
410
 
145
411
  super.viewDidAppear(animated)
146
412
 
147
-
148
-
149
- if UserDefaults.standard.object(forKey: "save") != nil {
413
+
150
-
151
-
152
-
153
- Array2 = UserDefaults.standard.object(forKey: "save") as! [String]
154
-
155
- }
156
-
157
-
158
414
 
159
415
  tableView.reloadData()
160
416
 
161
-
162
-
163
417
  }
164
418
 
165
419
 
@@ -168,7 +422,11 @@
168
422
 
169
423
  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
170
424
 
425
+
426
+
171
- return Array2.count
427
+ return resultArray2.count
428
+
429
+
172
430
 
173
431
  }
174
432
 
@@ -190,6 +448,14 @@
190
448
 
191
449
 
192
450
 
451
+ print("Array2:at cellForRowAt", Array2.description)
452
+
453
+ print(Array2.count)
454
+
455
+ print(resultArray2.description)
456
+
457
+ print(dateArray2.description)
458
+
193
459
 
194
460
 
195
461
  cell.textLabel!.text = resultArray2[indexPath.row]
@@ -235,327 +501,3 @@
235
501
 
236
502
 
237
503
  ```
238
-
239
-
240
-
241
- やりたいことはボタンを押したときに回数(セルのTitle)とその時の時間(セルのSubtitleに)をtableViewにつけたいのですがここで立ち止まっています。
242
-
243
- 無駄なコードがあるなど些細なことでもよろしいのでアドバイスいただけたら幸いです。
244
-
245
-
246
-
247
-
248
-
249
- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
250
-
251
- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
252
-
253
- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
254
-
255
- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
256
-
257
-
258
-
259
-
260
-
261
-
262
-
263
- 追記 1/9
264
-
265
-
266
-
267
- himeji001さんのアドバイス通りやってみたところ
268
-
269
- Array1には回数の入ったresultArray1と日付が入ったdateArray1を入れることが出来ました。
270
-
271
-
272
-
273
- しかしSaveViewControllerのViewDidLoadで,取り出しArray2に代入して、cellForRowAtにresultArray2とdateArray2のIndexPath.rowを表示させることがまだ出来ません。(Thread 1: Fatal error: Index out of range)
274
-
275
- そもそも、Array2 = [resultArray2, dateArray2]なのでArray2[IndexPath.row]はわかりますが、その中の配列resultArray2、dateArray2に[IndexPath.row]は使えないですよね。それぞれ新しく更新されたデータをcellForRowAtで
276
-
277
- cell.textLabel!.text (resultArray2の値)
278
-
279
- cell.detailTextLabel!.text(dateArray2の値)
280
-
281
- を入れる方法はありますでしょうか。
282
-
283
- あと、ViewWillAppearはreloaddataだけでいいのか教えていただきたいです。
284
-
285
-
286
-
287
- そしてスッキリした分かりやすいコードを書くために些細なことでもいいのでアドバイスいただけたら幸いです。
288
-
289
-
290
-
291
-
292
-
293
-
294
-
295
- ResultViewController.swift
296
-
297
-
298
-
299
- ```Swift
300
-
301
-
302
-
303
- var resultArray1 = [String]()
304
-
305
-
306
-
307
- var dateArray1 = [String]()
308
-
309
-
310
-
311
- var Array1: [[String]] = []
312
-
313
-
314
-
315
- var date = Date()
316
-
317
-
318
-
319
-
320
-
321
- ...
322
-
323
- ...
324
-
325
- ...
326
-
327
-
328
-
329
- @IBAction func record(_ sender: Any) {
330
-
331
-
332
-
333
- //配列を取り出す
334
-
335
- if (UserDefaults.standard.object(forKey: "save") != nil) {
336
-
337
- Array1 = UserDefaults.standard.object(forKey: "save") as! [[String]]
338
-
339
-
340
-
341
- }
342
-
343
-
344
-
345
-
346
-
347
- //zikanを呼び出す
348
-
349
- zikan()
350
-
351
- //resultArrayに回数を追加
352
-
353
- resultArray1.append(countLabel2.text!)
354
-
355
-
356
-
357
- Array1 = [resultArray1, dateArray1]
358
-
359
-
360
-
361
- UserDefaults.standard.set(Array1, forKey: "save")
362
-
363
-
364
-
365
- print(Array1.description)
366
-
367
- print(resultArray1.description)
368
-
369
- print(dateArray1.description)
370
-
371
- }
372
-
373
-
374
-
375
-
376
-
377
- func zikan() {
378
-
379
- //日付のフォーマットを指定する
380
-
381
- let format = DateFormatter()
382
-
383
- format.dateFormat = DateFormatter.dateFormat(fromTemplate: "yMdkHm", options: 0, locale: Locale(identifier: "ja_JP"))
384
-
385
-
386
-
387
- //日付をStringに変換する
388
-
389
- let sDate = format.string(from: date)
390
-
391
- //日付をdateArrayに入れる
392
-
393
- dateArray1.append(sDate)
394
-
395
- }
396
-
397
- ```
398
-
399
-
400
-
401
-
402
-
403
- SaveViewController.swift
404
-
405
-
406
-
407
- ```swift
408
-
409
- var resultArray2 = [String]()
410
-
411
-
412
-
413
- var dateArray2 = [String]()
414
-
415
-
416
-
417
- var Array2: [[String]] = []
418
-
419
-
420
-
421
- ...
422
-
423
- ...
424
-
425
- ...
426
-
427
-
428
-
429
-
430
-
431
- override func viewDidLoad() {
432
-
433
- super.viewDidLoad()
434
-
435
-
436
-
437
- tableView.delegate = self
438
-
439
- tableView.dataSource = self
440
-
441
-
442
-
443
- //Array2にresultArray2とdateArray2を代入
444
-
445
- Array2 = [resultArray2, dateArray2]
446
-
447
-
448
-
449
- if UserDefaults.standard.object(forKey: "save") != nil {
450
-
451
-
452
-
453
- Array2 = UserDefaults.standard.object(forKey: "save") as! [[String]]
454
-
455
- }
456
-
457
-
458
-
459
- print(resultArray2.description)
460
-
461
- print(dateArray2.description)
462
-
463
- print("Array2:", Array2.description)
464
-
465
-
466
-
467
-
468
-
469
- }
470
-
471
-
472
-
473
-
474
-
475
- override func viewWillAppear(_ animated: Bool) {
476
-
477
- super.viewDidAppear(animated)
478
-
479
-
480
-
481
-
482
-
483
-
484
-
485
- tableView.reloadData()
486
-
487
-
488
-
489
-
490
-
491
- }
492
-
493
-
494
-
495
-
496
-
497
- func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
498
-
499
- return Array2.count
500
-
501
- }
502
-
503
-
504
-
505
- func numberOfSections(in tableView: UITableView) -> Int {
506
-
507
- return 1
508
-
509
- }
510
-
511
-
512
-
513
- func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
514
-
515
- let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
516
-
517
-
518
-
519
- cell.textLabel!.text = resultArray2[indexPath.row]
520
-
521
- cell.detailTextLabel!.text = dateArray2[indexPath.row]
522
-
523
-
524
-
525
- return cell
526
-
527
- }
528
-
529
-
530
-
531
- func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
532
-
533
- return 40
534
-
535
- }
536
-
537
-
538
-
539
- func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
540
-
541
-
542
-
543
- if editingStyle == .delete {
544
-
545
- Array2.remove(at: indexPath.row)
546
-
547
-
548
-
549
- UserDefaults.standard.set(Array2, forKey: "save")
550
-
551
-
552
-
553
- tableView.reloadData()
554
-
555
- }
556
-
557
- }
558
-
559
-
560
-
561
- ```

4

わか利やすく変更

2019/01/09 09:23

投稿

hahum
hahum

スコア65

test CHANGED
File without changes
test CHANGED
@@ -272,9 +272,15 @@
272
272
 
273
273
  しかしSaveViewControllerのViewDidLoadで,取り出しArray2に代入して、cellForRowAtにresultArray2とdateArray2のIndexPath.rowを表示させることがまだ出来ません。(Thread 1: Fatal error: Index out of range)
274
274
 
275
-
275
+ そもそも、Array2 = [resultArray2, dateArray2]なのでArray2[IndexPath.row]はわかりますが、その中の配列resultArray2、dateArray2に[IndexPath.row]は使えないですよね。それぞれ新しく更新されたデータをcellForRowAtで
276
+
276
-
277
+ cell.textLabel!.text (resultArray2の値)
278
+
279
+ cell.detailTextLabel!.text(dateArray2の値)
280
+
281
+ を入れる方法はありますでしょうか。
282
+
277
- Array2にArray1のデータを入れた後、resultArray2, dateArray2にそれぞれ入れることはできますでしょうか、あと、ViewWillAppearはreloaddataだけでいいのか教えていただきたいです。
283
+ あと、ViewWillAppearはreloaddataだけでいいのか教えていただきたいです。
278
284
 
279
285
 
280
286
 

3

変更

2019/01/09 05:02

投稿

hahum
hahum

スコア65

test CHANGED
@@ -1 +1 @@
1
- cannot use instance member '配列名' within property initializerと追記
1
+ cannot use instance member '配列名' within property initializer;と追記
test CHANGED
@@ -246,53 +246,41 @@
246
246
 
247
247
 
248
248
 
249
- //////////////////////////////////////////////////////////////////////////
250
-
251
- /////////////////////////////////////////////////////////////////////////
252
-
253
- /////////////////////////////////////////////////////////////////////////
254
-
255
- /////////////////////////////////////////////////////////////////////////
256
-
257
- **追記**
258
-
259
-
260
-
261
-
262
-
263
-
264
-
265
- Fatal error: Index out of rangeについてです。
266
-
267
-
268
-
269
- SaveVIewController.swiftのViewwillAppearにおいて、
249
+ ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
270
-
250
+
271
- //Array2にresultArray2とdateArray2を代入
251
+ ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
252
+
272
-
253
+ ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
254
+
255
+ ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
256
+
257
+
258
+
259
+
260
+
261
+
262
+
263
+ 追記 1/9
264
+
265
+
266
+
267
+ himeji001さんのアドバイス通りやってみたところ
268
+
273
- Array2 = [resultArray2,dateArray2]
269
+ Array1には回数の入ったresultArray1と日付が入ったdateArray1を入れることが出来ました。
274
-
275
-
276
-
277
-
278
-
279
- print(Array2.count)
270
+
280
-
271
+
272
+
281
- print(resultArray2.count)
273
+ しかしSaveViewControllerのViewDidLoadで,取り出しArray2に代入して、cellForRowAtにresultArray2とdateArray2のIndexPath.rowを表示させることがまだ出来ません。(Thread 1: Fatal error: Index out of range)
282
-
283
- print(dateArray2.count)
274
+
284
-
285
-
286
-
287
- を実行したところ、
275
+
288
-
289
- 2
276
+
290
-
291
- 0
292
-
293
- 0
294
-
295
- でした。2の理由はArray2 = [resultArray2,dateArray2]なのですresultArray2とdateArray2に値が入ってことが原因と思われます。これを解決する方法を教えてきたいです。
277
+ Array2にArray1のデータを入れた後、resultArray2, dateArray2にそれぞれ入れることはきまでしょうかあと、ViewWillAppearreloaddataだけでいいか教えていただきたいです。
278
+
279
+
280
+
281
+ そしてスッキリした分かりやすいコードを書くために些細なことでもいいのでアドバイスいただけたら幸いです。
282
+
283
+
296
284
 
297
285
 
298
286
 
@@ -300,8 +288,12 @@
300
288
 
301
289
  ResultViewController.swift
302
290
 
291
+
292
+
303
293
  ```Swift
304
294
 
295
+
296
+
305
297
  var resultArray1 = [String]()
306
298
 
307
299
 
@@ -312,302 +304,252 @@
312
304
 
313
305
  var Array1: [[String]] = []
314
306
 
315
-
307
+
316
308
 
317
309
  var date = Date()
318
310
 
319
311
 
320
312
 
313
+
314
+
321
- ...
315
+ ...
322
-
316
+
323
- ...
317
+ ...
324
-
318
+
325
- ...
319
+ ...
320
+
321
+
322
+
326
-
323
+ @IBAction func record(_ sender: Any) {
324
+
325
+
326
+
327
-
327
+ //配列を取り出す
328
+
328
-
329
+ if (UserDefaults.standard.object(forKey: "save") != nil) {
330
+
331
+ Array1 = UserDefaults.standard.object(forKey: "save") as! [[String]]
332
+
333
+
334
+
335
+ }
336
+
337
+
338
+
339
+
340
+
341
+ //zikanを呼び出す
342
+
343
+ zikan()
344
+
345
+ //resultArrayに回数を追加
346
+
347
+ resultArray1.append(countLabel2.text!)
348
+
349
+
350
+
351
+ Array1 = [resultArray1, dateArray1]
352
+
353
+
354
+
355
+ UserDefaults.standard.set(Array1, forKey: "save")
356
+
357
+
358
+
359
+ print(Array1.description)
360
+
361
+ print(resultArray1.description)
362
+
363
+ print(dateArray1.description)
364
+
365
+ }
366
+
367
+
368
+
369
+
370
+
371
+ func zikan() {
372
+
373
+ //日付のフォーマットを指定する
374
+
375
+ let format = DateFormatter()
376
+
377
+ format.dateFormat = DateFormatter.dateFormat(fromTemplate: "yMdkHm", options: 0, locale: Locale(identifier: "ja_JP"))
378
+
379
+
380
+
381
+ //日付をStringに変換する
382
+
383
+ let sDate = format.string(from: date)
384
+
385
+ //日付をdateArrayに入れる
386
+
387
+ dateArray1.append(sDate)
388
+
389
+ }
390
+
391
+ ```
392
+
393
+
394
+
395
+
396
+
397
+ SaveViewController.swift
398
+
399
+
400
+
401
+ ```swift
402
+
403
+ var resultArray2 = [String]()
404
+
405
+
406
+
407
+ var dateArray2 = [String]()
408
+
409
+
410
+
411
+ var Array2: [[String]] = []
412
+
413
+
414
+
415
+ ...
416
+
417
+ ...
418
+
419
+ ...
420
+
421
+
422
+
423
+
424
+
329
- override func viewDidLoad() {
425
+ override func viewDidLoad() {
330
426
 
331
427
  super.viewDidLoad()
332
428
 
333
429
 
334
430
 
335
- Array1 = [resultArray1, dateArray1]
336
-
337
- ...
338
-
339
- ...
340
-
341
- ...
342
-
343
-
344
-
345
- }
346
-
347
- }
348
-
349
-
350
-
351
- @IBAction func record(_ sender: Any) {
352
-
353
-
354
-
355
-
356
-
357
- //zikanを呼び出す
358
-
359
- zikan()
360
-
361
-
362
-
363
- //配列を取り出す
364
-
365
- if (UserDefaults.standard.object(forKey: "save") != nil) {
366
-
367
- Array1 = UserDefaults.standard.object(forKey: "save") as! [[String]]
368
-
369
- }
370
-
371
-
372
-
373
- resultArray1.append(countLabel2.text!)
374
-
375
-
376
-
377
- UserDefaults.standard.set(Array1, forKey: "save")
378
-
379
- }
380
-
381
-
382
-
383
-
384
-
385
- func zikan() {
386
-
387
- //日付のフォーマットを指定する
388
-
389
- let format = DateFormatter()
390
-
391
- format.dateFormat = DateFormatter.dateFormat(fromTemplate: "yMdkHm", options: 0, locale: Locale(identifier: "ja_JP"))
392
-
393
-
394
-
395
- //日付をStringに変換する
396
-
397
- let sDate = format.string(from: date)
398
-
399
-
400
-
401
- //日付をdateArrayに入れる
402
-
403
- dateArray1.append(sDate)
404
-
405
-
406
-
407
- }
431
+ tableView.delegate = self
432
+
433
+ tableView.dataSource = self
434
+
435
+
436
+
437
+ //Array2にresultArray2とdateArray2を代入
438
+
439
+ Array2 = [resultArray2, dateArray2]
440
+
441
+
442
+
443
+ if UserDefaults.standard.object(forKey: "save") != nil {
444
+
445
+
446
+
447
+ Array2 = UserDefaults.standard.object(forKey: "save") as! [[String]]
448
+
449
+ }
450
+
451
+
452
+
453
+ print(resultArray2.description)
454
+
455
+ print(dateArray2.description)
456
+
457
+ print("Array2:", Array2.description)
458
+
459
+
460
+
461
+
462
+
463
+ }
464
+
465
+
466
+
467
+
468
+
469
+ override func viewWillAppear(_ animated: Bool) {
470
+
471
+ super.viewDidAppear(animated)
472
+
473
+
474
+
475
+
476
+
477
+
478
+
479
+ tableView.reloadData()
480
+
481
+
482
+
483
+
484
+
485
+ }
486
+
487
+
488
+
489
+
490
+
491
+ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
492
+
493
+ return Array2.count
494
+
495
+ }
496
+
497
+
498
+
499
+ func numberOfSections(in tableView: UITableView) -> Int {
500
+
501
+ return 1
502
+
503
+ }
504
+
505
+
506
+
507
+ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
508
+
509
+ let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
510
+
511
+
512
+
513
+ cell.textLabel!.text = resultArray2[indexPath.row]
514
+
515
+ cell.detailTextLabel!.text = dateArray2[indexPath.row]
516
+
517
+
518
+
519
+ return cell
520
+
521
+ }
522
+
523
+
524
+
525
+ func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
526
+
527
+ return 40
528
+
529
+ }
530
+
531
+
532
+
533
+ func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
534
+
535
+
536
+
537
+ if editingStyle == .delete {
538
+
539
+ Array2.remove(at: indexPath.row)
540
+
541
+
542
+
543
+ UserDefaults.standard.set(Array2, forKey: "save")
544
+
545
+
546
+
547
+ tableView.reloadData()
548
+
549
+ }
550
+
551
+ }
552
+
553
+
408
554
 
409
555
  ```
410
-
411
-
412
-
413
- SaveViewController.Swift
414
-
415
- ```Swift
416
-
417
- import UIKit
418
-
419
-
420
-
421
- class SaveViewController: UIViewController,UITableViewDelegate,
422
-
423
- UITableViewDataSource {
424
-
425
-
426
-
427
- @IBOutlet var tableView: UITableView!
428
-
429
-
430
-
431
- var resultArray2 = [String]()
432
-
433
- var dateArray2 = [String]()
434
-
435
-
436
-
437
- var Array2: [[String]] = []
438
-
439
-
440
-
441
-
442
-
443
-
444
-
445
- override func viewDidLoad() {
446
-
447
- super.viewDidLoad()
448
-
449
-
450
-
451
-
452
-
453
-
454
-
455
- tableView.delegate = self
456
-
457
- tableView.dataSource = self
458
-
459
-
460
-
461
- }
462
-
463
-
464
-
465
-
466
-
467
- override func viewWillAppear(_ animated: Bool) {
468
-
469
- super.viewDidAppear(animated)
470
-
471
-
472
-
473
-
474
-
475
- if UserDefaults.standard.object(forKey: "save") != nil {
476
-
477
-
478
-
479
- Array2 = UserDefaults.standard.object(forKey: "save") as! [[String]]
480
-
481
- }
482
-
483
-
484
-
485
-
486
-
487
- //Array2にresultArray2とdateArray2を代入
488
-
489
- Array2 = [resultArray2,dateArray2]
490
-
491
-
492
-
493
- resultArray2 = Array2[0]
494
-
495
- dateArray2 = Array2[1]
496
-
497
-
498
-
499
- print(Array2.count)
500
-
501
- print(resultArray2.count)
502
-
503
- print(dateArray2.count)
504
-
505
-
506
-
507
-
508
-
509
- tableView.reloadData()
510
-
511
-
512
-
513
-
514
-
515
- }
516
-
517
-
518
-
519
-
520
-
521
- func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
522
-
523
- return Array2.count
524
-
525
- }
526
-
527
-
528
-
529
- func numberOfSections(in tableView: UITableView) -> Int {
530
-
531
- return 1
532
-
533
- }
534
-
535
-
536
-
537
- func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
538
-
539
- let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
540
-
541
-
542
-
543
-
544
-
545
-
546
-
547
- cell.textLabel!.text = resultArray2[indexPath.row] **Fatal error: Index out of range**
548
-
549
- cell.detailTextLabel!.text = dateArray2[indexPath.row]
550
-
551
-
552
-
553
- return cell
554
-
555
- }
556
-
557
-
558
-
559
- func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
560
-
561
- return 40
562
-
563
- }
564
-
565
-
566
-
567
- func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
568
-
569
-
570
-
571
- if editingStyle == .delete {
572
-
573
- Array2.remove(at: indexPath.row)
574
-
575
-
576
-
577
- UserDefaults.standard.set(Array2, forKey: "save")
578
-
579
-
580
-
581
- tableView.reloadData()
582
-
583
- }
584
-
585
- }
586
-
587
-
588
-
589
- /*
590
-
591
- // MARK: - Navigation
592
-
593
-
594
-
595
- // In a storyboard-based application, you will often want to do a little preparation before navigation
596
-
597
- override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
598
-
599
- // Get the new view controller using segue.destination.
600
-
601
- // Pass the selected object to the new view controller.
602
-
603
- }
604
-
605
- */
606
-
607
-
608
-
609
- }
610
-
611
-
612
-
613
- ```

2

修正

2019/01/09 04:13

投稿

hahum
hahum

スコア65

test CHANGED
@@ -1 +1 @@
1
- cannot use instance member '配列名' within property initializer;
1
+ cannot use instance member '配列名' within property initializerと追記
test CHANGED
@@ -490,7 +490,11 @@
490
490
 
491
491
 
492
492
 
493
-
493
+ resultArray2 = Array2[0]
494
+
495
+ dateArray2 = Array2[1]
496
+
497
+
494
498
 
495
499
  print(Array2.count)
496
500
 

1

追記

2019/01/07 19:52

投稿

hahum
hahum

スコア65

test CHANGED
File without changes
test CHANGED
@@ -241,3 +241,369 @@
241
241
  やりたいことはボタンを押したときに回数(セルのTitle)とその時の時間(セルのSubtitleに)をtableViewにつけたいのですがここで立ち止まっています。
242
242
 
243
243
  無駄なコードがあるなど些細なことでもよろしいのでアドバイスいただけたら幸いです。
244
+
245
+
246
+
247
+
248
+
249
+ //////////////////////////////////////////////////////////////////////////
250
+
251
+ /////////////////////////////////////////////////////////////////////////
252
+
253
+ /////////////////////////////////////////////////////////////////////////
254
+
255
+ /////////////////////////////////////////////////////////////////////////
256
+
257
+ **追記**
258
+
259
+
260
+
261
+
262
+
263
+
264
+
265
+ Fatal error: Index out of rangeについてです。
266
+
267
+
268
+
269
+ SaveVIewController.swiftのViewwillAppearにおいて、
270
+
271
+ //Array2にresultArray2とdateArray2を代入
272
+
273
+ Array2 = [resultArray2,dateArray2]
274
+
275
+
276
+
277
+
278
+
279
+ print(Array2.count)
280
+
281
+ print(resultArray2.count)
282
+
283
+ print(dateArray2.count)
284
+
285
+
286
+
287
+ を実行したところ、
288
+
289
+ 2
290
+
291
+ 0
292
+
293
+ 0
294
+
295
+ でした。2の理由はArray2 = [resultArray2,dateArray2]なのですが、resultArray2とdateArray2に値が入っていないことが原因かと思われます。これを解決する方法を教えて頂きたいです。
296
+
297
+
298
+
299
+
300
+
301
+ ResultViewController.swift
302
+
303
+ ```Swift
304
+
305
+ var resultArray1 = [String]()
306
+
307
+
308
+
309
+ var dateArray1 = [String]()
310
+
311
+
312
+
313
+ var Array1: [[String]] = []
314
+
315
+
316
+
317
+ var date = Date()
318
+
319
+
320
+
321
+ ...
322
+
323
+ ...
324
+
325
+ ...
326
+
327
+
328
+
329
+ override func viewDidLoad() {
330
+
331
+ super.viewDidLoad()
332
+
333
+
334
+
335
+ Array1 = [resultArray1, dateArray1]
336
+
337
+ ...
338
+
339
+ ...
340
+
341
+ ...
342
+
343
+
344
+
345
+ }
346
+
347
+ }
348
+
349
+
350
+
351
+ @IBAction func record(_ sender: Any) {
352
+
353
+
354
+
355
+
356
+
357
+ //zikanを呼び出す
358
+
359
+ zikan()
360
+
361
+
362
+
363
+ //配列を取り出す
364
+
365
+ if (UserDefaults.standard.object(forKey: "save") != nil) {
366
+
367
+ Array1 = UserDefaults.standard.object(forKey: "save") as! [[String]]
368
+
369
+ }
370
+
371
+
372
+
373
+ resultArray1.append(countLabel2.text!)
374
+
375
+
376
+
377
+ UserDefaults.standard.set(Array1, forKey: "save")
378
+
379
+ }
380
+
381
+
382
+
383
+
384
+
385
+ func zikan() {
386
+
387
+ //日付のフォーマットを指定する
388
+
389
+ let format = DateFormatter()
390
+
391
+ format.dateFormat = DateFormatter.dateFormat(fromTemplate: "yMdkHm", options: 0, locale: Locale(identifier: "ja_JP"))
392
+
393
+
394
+
395
+ //日付をStringに変換する
396
+
397
+ let sDate = format.string(from: date)
398
+
399
+
400
+
401
+ //日付をdateArrayに入れる
402
+
403
+ dateArray1.append(sDate)
404
+
405
+
406
+
407
+ }
408
+
409
+ ```
410
+
411
+
412
+
413
+ SaveViewController.Swift
414
+
415
+ ```Swift
416
+
417
+ import UIKit
418
+
419
+
420
+
421
+ class SaveViewController: UIViewController,UITableViewDelegate,
422
+
423
+ UITableViewDataSource {
424
+
425
+
426
+
427
+ @IBOutlet var tableView: UITableView!
428
+
429
+
430
+
431
+ var resultArray2 = [String]()
432
+
433
+ var dateArray2 = [String]()
434
+
435
+
436
+
437
+ var Array2: [[String]] = []
438
+
439
+
440
+
441
+
442
+
443
+
444
+
445
+ override func viewDidLoad() {
446
+
447
+ super.viewDidLoad()
448
+
449
+
450
+
451
+
452
+
453
+
454
+
455
+ tableView.delegate = self
456
+
457
+ tableView.dataSource = self
458
+
459
+
460
+
461
+ }
462
+
463
+
464
+
465
+
466
+
467
+ override func viewWillAppear(_ animated: Bool) {
468
+
469
+ super.viewDidAppear(animated)
470
+
471
+
472
+
473
+
474
+
475
+ if UserDefaults.standard.object(forKey: "save") != nil {
476
+
477
+
478
+
479
+ Array2 = UserDefaults.standard.object(forKey: "save") as! [[String]]
480
+
481
+ }
482
+
483
+
484
+
485
+
486
+
487
+ //Array2にresultArray2とdateArray2を代入
488
+
489
+ Array2 = [resultArray2,dateArray2]
490
+
491
+
492
+
493
+
494
+
495
+ print(Array2.count)
496
+
497
+ print(resultArray2.count)
498
+
499
+ print(dateArray2.count)
500
+
501
+
502
+
503
+
504
+
505
+ tableView.reloadData()
506
+
507
+
508
+
509
+
510
+
511
+ }
512
+
513
+
514
+
515
+
516
+
517
+ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
518
+
519
+ return Array2.count
520
+
521
+ }
522
+
523
+
524
+
525
+ func numberOfSections(in tableView: UITableView) -> Int {
526
+
527
+ return 1
528
+
529
+ }
530
+
531
+
532
+
533
+ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
534
+
535
+ let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
536
+
537
+
538
+
539
+
540
+
541
+
542
+
543
+ cell.textLabel!.text = resultArray2[indexPath.row] **Fatal error: Index out of range**
544
+
545
+ cell.detailTextLabel!.text = dateArray2[indexPath.row]
546
+
547
+
548
+
549
+ return cell
550
+
551
+ }
552
+
553
+
554
+
555
+ func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
556
+
557
+ return 40
558
+
559
+ }
560
+
561
+
562
+
563
+ func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
564
+
565
+
566
+
567
+ if editingStyle == .delete {
568
+
569
+ Array2.remove(at: indexPath.row)
570
+
571
+
572
+
573
+ UserDefaults.standard.set(Array2, forKey: "save")
574
+
575
+
576
+
577
+ tableView.reloadData()
578
+
579
+ }
580
+
581
+ }
582
+
583
+
584
+
585
+ /*
586
+
587
+ // MARK: - Navigation
588
+
589
+
590
+
591
+ // In a storyboard-based application, you will often want to do a little preparation before navigation
592
+
593
+ override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
594
+
595
+ // Get the new view controller using segue.destination.
596
+
597
+ // Pass the selected object to the new view controller.
598
+
599
+ }
600
+
601
+ */
602
+
603
+
604
+
605
+ }
606
+
607
+
608
+
609
+ ```