回答編集履歴
5
1/9追記4
answer
CHANGED
@@ -115,23 +115,25 @@
|
|
115
115
|
|
116
116
|
まだ理解していないみたいですね。
|
117
117
|
SaveViewController.swiftのviewDidLoad()もおかしいです。
|
118
|
-
|
118
|
+
この追記のコードを見て、順番・入る中身をよく考えて、またやってみてください。
|
119
119
|
func内では基本上から下に順に処理されるんですよ。
|
120
120
|
|
121
121
|
理解できれば、なぜprint(resultArray2)とprint(dateArray2)が空なのかわかると思います。
|
122
122
|
|
123
|
+
また、エラーは理由が書いてある「Index out of range」ので、
|
123
|
-
|
124
|
+
google翻訳でも駆使して、日本語に訳して考えてください。
|
124
125
|
解決には、以前も書きましたが、
|
125
126
|
```Swift
|
126
127
|
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
127
128
|
return Array2.count
|
128
129
|
}
|
129
130
|
```
|
130
|
-
で返ってくる個数を考えてください。
|
131
|
+
で返ってくる個数を考えて、何がおかしいのかを考えてください。
|
131
|
-
わからなければ、print(Array2.count)で確認
|
132
|
+
わからなければ、print(Array2.count)で個数の確認もできます。
|
132
|
-
cellforRowatの取り出し方も、
|
133
|
-
順番・取り出し方を考えればわかるはずです。
|
134
133
|
|
134
|
+
cellforRowatの取り出し方も、データの構造、
|
135
|
+
順番・取り出し方等を考えればわかるはずです。
|
136
|
+
|
135
137
|
そろそろ同じことを何度もやり取りするのは疲れてきました。
|
136
138
|
答えは全て、このページに載っています。
|
137
139
|
よく全体を読んで、理解してください。
|
4
1/9追記3
answer
CHANGED
@@ -115,9 +115,11 @@
|
|
115
115
|
|
116
116
|
まだ理解していないみたいですね。
|
117
117
|
SaveViewController.swiftのviewDidLoad()もおかしいです。
|
118
|
-
上記のコードを見て、
|
118
|
+
上記のコードを見て、順番・入る中身をよく考えて、またやってみてください。
|
119
|
+
func内では基本上から下に順に処理されるんですよ。
|
119
120
|
|
120
121
|
理解できれば、なぜprint(resultArray2)とprint(dateArray2)が空なのかわかると思います。
|
122
|
+
|
121
123
|
また、エラーは理由が書いてあるので、日本語に訳して考えてください。
|
122
124
|
解決には、以前も書きましたが、
|
123
125
|
```Swift
|
@@ -126,4 +128,10 @@
|
|
126
128
|
}
|
127
129
|
```
|
128
130
|
で返ってくる個数を考えてください。
|
129
|
-
わからなければ、print(Array2.count)で確認してください。
|
131
|
+
わからなければ、print(Array2.count)で確認してください。
|
132
|
+
cellforRowatの取り出し方も、
|
133
|
+
順番・取り出し方を考えればわかるはずです。
|
134
|
+
|
135
|
+
そろそろ同じことを何度もやり取りするのは疲れてきました。
|
136
|
+
答えは全て、このページに載っています。
|
137
|
+
よく全体を読んで、理解してください。
|
3
1/9追記2
answer
CHANGED
@@ -99,7 +99,7 @@
|
|
99
99
|
printで作ったあとは確認してくださいね。
|
100
100
|
|
101
101
|
/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
102
|
-
1/9追記
|
102
|
+
**1/9追記**
|
103
103
|
|
104
104
|
②がないと、過去のデータが読み込まれないので、
|
105
105
|
その都度、ボタンを押した時に入れた新しいもののみしか保存されません。
|
@@ -117,4 +117,13 @@
|
|
117
117
|
SaveViewController.swiftのviewDidLoad()もおかしいです。
|
118
118
|
上記のコードを見て、また考えてやってみてください。
|
119
119
|
|
120
|
-
理解できれば、なぜprint(resultArray2)とprint(dateArray2)が空なのかわかると思います。
|
120
|
+
理解できれば、なぜprint(resultArray2)とprint(dateArray2)が空なのかわかると思います。
|
121
|
+
また、エラーは理由が書いてあるので、日本語に訳して考えてください。
|
122
|
+
解決には、以前も書きましたが、
|
123
|
+
```Swift
|
124
|
+
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
125
|
+
return Array2.count
|
126
|
+
}
|
127
|
+
```
|
128
|
+
で返ってくる個数を考えてください。
|
129
|
+
わからなければ、print(Array2.count)で確認してください。
|
2
1/9追記
answer
CHANGED
@@ -96,4 +96,25 @@
|
|
96
96
|
|
97
97
|
です。
|
98
98
|
これでArrayにまず初期データがきちんとできると思います。
|
99
|
-
printで作ったあとは確認してくださいね。
|
99
|
+
printで作ったあとは確認してくださいね。
|
100
|
+
|
101
|
+
/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
102
|
+
1/9追記
|
103
|
+
|
104
|
+
②がないと、過去のデータが読み込まれないので、
|
105
|
+
その都度、ボタンを押した時に入れた新しいもののみしか保存されません。
|
106
|
+
なので、永遠に1個しかデータは保存されません。
|
107
|
+
|
108
|
+
なので②は
|
109
|
+
```Swift
|
110
|
+
self.resultArray1 = self.Array1[0] // Array1の要素0(resultArray1の保存したもの)をresultArray1に入れる
|
111
|
+
// Array1つまり、Userdefaultsから保存したものを取り出して、セットした配列ですよ!
|
112
|
+
self.dateArray1 = self.Array1[1] // Array1の要素1(dateArray1の保存したもの)をdateArray1に入れる
|
113
|
+
```
|
114
|
+
と書けばいいです。
|
115
|
+
|
116
|
+
まだ理解していないみたいですね。
|
117
|
+
SaveViewController.swiftのviewDidLoad()もおかしいです。
|
118
|
+
上記のコードを見て、また考えてやってみてください。
|
119
|
+
|
120
|
+
理解できれば、なぜprint(resultArray2)とprint(dateArray2)が空なのかわかると思います。
|
1
追加回答
answer
CHANGED
@@ -20,4 +20,80 @@
|
|
20
20
|
Array1 = UserDefaults.standard.object(forKey: "save") as! [[String]]
|
21
21
|
|
22
22
|
です。
|
23
|
-
まずそこから直してみましょう。他のコードも見てみます。
|
23
|
+
まずそこから直してみましょう。他のコードも見てみます。
|
24
|
+
|
25
|
+
**[以下追記 1/8]**
|
26
|
+
**/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/**
|
27
|
+
|
28
|
+
保存のところのコードがやはりおかしいです。
|
29
|
+
最初に見なくて申し訳なかったです。
|
30
|
+
|
31
|
+
```Swift
|
32
|
+
@IBAction func record(_ sender: Any) {
|
33
|
+
//zikan、①dateArray1に日付をString型で追加保存
|
34
|
+
zikan()
|
35
|
+
//配列を取り出す ②もし過去のデータがあるなら、Array1に読み込む
|
36
|
+
if (UserDefaults.standard.object(forKey: "save") != nil) {
|
37
|
+
Array1 = UserDefaults.standard.object(forKey: "save") as! [String]
|
38
|
+
}
|
39
|
+
// ③resultArray1にStringを追加保存
|
40
|
+
resultArray1.append(countLabel2.text!)
|
41
|
+
/*//日付をdateArrayに入れる
|
42
|
+
dateArray1.append(sDate)*/
|
43
|
+
// ④userdefaultsに再度保存
|
44
|
+
UserDefaults.standard.set(Array1, forKey: "save")
|
45
|
+
}
|
46
|
+
|
47
|
+
func zikan() {
|
48
|
+
//日付のフォーマットを指定する
|
49
|
+
let format = DateFormatter()
|
50
|
+
format.dateFormat = DateFormatter.dateFormat(fromTemplate: "yMdkHm", options: 0, locale: Locale(identifier: "ja_JP"))
|
51
|
+
//日付をStringに変換する
|
52
|
+
let sDate = format.string(from: date)
|
53
|
+
//日付をdateArrayに入れる
|
54
|
+
dateArray1.append(sDate)
|
55
|
+
}
|
56
|
+
|
57
|
+
```
|
58
|
+
|
59
|
+
func zikan()に関してはまぁ、置いといて、
|
60
|
+
@IBOutlet func record() {}に関してですが、
|
61
|
+
追加記入した、順番と行なっていることを考えてください。
|
62
|
+
①dateArray1に日付(String型)を追加保存
|
63
|
+
②もし過去のデータがあるなら、Array1に読み込む
|
64
|
+
③resultArray1にStringを追加保存
|
65
|
+
④userdefaultsにArray1を再度保存
|
66
|
+
|
67
|
+
データ構造と共に加味すると、
|
68
|
+
```Swift
|
69
|
+
var resultArray1 = [String]()
|
70
|
+
var dateArray1 = [String]()
|
71
|
+
var Array1 = [resultArray1,dateArray1]
|
72
|
+
```
|
73
|
+
|
74
|
+
resultArray1, dateArray1共に、空配列から始まる
|
75
|
+
(。。。viewdidLoadで読み込んでたらごめんなさい。)
|
76
|
+
まず、dateArray1に押した時の日付が保存される。
|
77
|
+
Array1にUserDefaultsから過去のデータが入る
|
78
|
+
dateArray1にStringを追加保存する
|
79
|
+
UserDefaultsにArray1を再度保存している。
|
80
|
+
|
81
|
+
の流れ、なので、よく見てもらえると、
|
82
|
+
Array1は他のdateArray1やresultArray1とやり取りを何もしていません。
|
83
|
+
これではArray1に何かデータが入るはずがありません。
|
84
|
+
なので、何も保存されないのです。
|
85
|
+
|
86
|
+
正しい流れは、まず、何と言っても
|
87
|
+
|
88
|
+
①過去データがあれば読み込む
|
89
|
+
userdefaults->Array1
|
90
|
+
②Array1の中身を分解し、追加できるようにセットする
|
91
|
+
Array1 -> dateArray1とresultArray1に挿入。
|
92
|
+
③それぞれのdateArray1とresultArray1にデータを追加
|
93
|
+
④新規データが追加されたdateArray1とresultArray1を再びArray1にセット(戻す)
|
94
|
+
⑤Array1を永続させるためにUserdefaultsに上書きする
|
95
|
+
(⑥printでArray1の中身を確認する)
|
96
|
+
|
97
|
+
です。
|
98
|
+
これでArrayにまず初期データがきちんとできると思います。
|
99
|
+
printで作ったあとは確認してくださいね。
|