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

回答編集履歴

5

1/9追記4

2019/01/09 06:19

投稿

hameji001
hameji001

スコア639

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

2019/01/09 06:19

投稿

hameji001
hameji001

スコア639

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

2019/01/09 06:16

投稿

hameji001
hameji001

スコア639

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追記

2019/01/09 06:09

投稿

hameji001
hameji001

スコア639

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

追加回答

2019/01/09 06:06

投稿

hameji001
hameji001

スコア639

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で作ったあとは確認してくださいね。