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

回答編集履歴

4

編集

2020/04/13 15:19

投稿

退会済みユーザー
answer CHANGED
@@ -1,4 +1,14 @@
1
1
  エラーの出る行の上で、
2
2
  ```swift
3
3
  print(userDefaults.object(forKey: "UserName"))
4
- ```ってしてみたら`nil`って表示されない?
4
+ ```ってしてみたら`nil`って表示されない?
5
+
6
+ ---
7
+ viewDidLoad()の中で、初期値を設定する前に値を読み込んでいます。
8
+ 初期値を全て登録してから、値を読み込むようにコードの順番を変更してください。
9
+
10
+ readData()はいつも"NickName"をキーとして保存してる文字列を返すようになっています。各々のラベルに表示する文字列を返す用に変更してください。
11
+
12
+ userDefaultは保存処理をすると値が上書きされるので、func hozonButton()内部の`Key の値を削除`部分は不要です。
13
+
14
+ とりあえず直してみてください。

3

訂正

2020/04/13 15:19

投稿

退会済みユーザー
answer CHANGED
@@ -1,34 +1,4 @@
1
1
  エラーの出る行の上で、
2
+ ```swift
2
- print(userDefaults.object(forKey: "UserName"))ってしてみたらnilって表示されない?
3
+ print(userDefaults.object(forKey: "UserName"))
3
- func readData() -> String {
4
- let str: String = userDefaults.object(forKey: "NickName") as! String
5
- let _: String = userDefaults.object(forKey: "UserName") as! String
6
- let _: String = userDefaults.object(forKey: "SendEmail") as! String
7
- let _: String = userDefaults.object(forKey: "SendPhone") as! String
8
- let _: String = userDefaults.object(forKey: "NextSendEmail") as! String
9
- let _: String = userDefaults.object(forKey: "NextSendPhone") as! String
10
- return str
11
- }
12
- の中身は3行目いかが意味不明だけど、処理の流れを追っていけば、なんでnilになるかもわかると思う。
13
- viewDidLaoadのなかで初期値を設定してる順番とreadDateしている順番を一つ一つみていってください。
14
- override func viewDidLoad() {
4
+ ```ってしてみたら`nil`って表示されない?
15
- super.viewDidLoad()
16
- nickNameTextField.delegate = self
17
- userNameTextField.delegate = self
18
- sendEmailTextField.delegate = self
19
- sendPhoneNumber.delegate = self
20
- nextSendEmailTextField.delegate = self
21
- nextSendPhoneNumber.delegate = self
22
- userDefaults.register(defaults: ["NickName": "ニックネームを入力"])
23
- nickNameLabel.text = readData()
24
- userDefaults.register(defaults: ["UserName": "名前を入力"])
25
- userNameLabel.text = readData()
26
- userDefaults.register(defaults: ["SendEmail": "Emailを入力"])
27
- sendEmailLabel.text = readData()
28
- userDefaults.register(defaults: ["SendPhone": "電話番号を入力"])
29
- sendPhoneLabel.text = readData()
30
- userDefaults.register(defaults: ["NextSendEmail": "Emailを入力"])
31
- nextSendEmailLabel.text = readData()
32
- userDefaults.register(defaults: ["NextSendPhone": "電話番号を入力"])
33
- nextSendPhoneLabel.text = readData()
34
- }

2

訂正

2020/04/13 14:55

投稿

退会済みユーザー
answer CHANGED
@@ -1,53 +1,34 @@
1
1
  エラーの出る行の上で、
2
2
  print(userDefaults.object(forKey: "UserName"))ってしてみたらnilって表示されない?
3
-
4
3
  func readData() -> String {
5
4
  let str: String = userDefaults.object(forKey: "NickName") as! String
6
-
7
5
  let _: String = userDefaults.object(forKey: "UserName") as! String
8
-
9
6
  let _: String = userDefaults.object(forKey: "SendEmail") as! String
10
-
11
7
  let _: String = userDefaults.object(forKey: "SendPhone") as! String
12
-
13
8
  let _: String = userDefaults.object(forKey: "NextSendEmail") as! String
14
-
15
9
  let _: String = userDefaults.object(forKey: "NextSendPhone") as! String
16
-
17
10
  return str
18
-
19
11
  }
20
-
21
12
  の中身は3行目いかが意味不明だけど、処理の流れを追っていけば、なんでnilになるかもわかると思う。
22
-
23
13
  viewDidLaoadのなかで初期値を設定してる順番とreadDateしている順番を一つ一つみていってください。
24
-
25
14
  override func viewDidLoad() {
26
15
  super.viewDidLoad()
27
-
28
16
  nickNameTextField.delegate = self
29
17
  userNameTextField.delegate = self
30
18
  sendEmailTextField.delegate = self
31
19
  sendPhoneNumber.delegate = self
32
20
  nextSendEmailTextField.delegate = self
33
21
  nextSendPhoneNumber.delegate = self
34
-
35
22
  userDefaults.register(defaults: ["NickName": "ニックネームを入力"])
36
23
  nickNameLabel.text = readData()
37
-
38
24
  userDefaults.register(defaults: ["UserName": "名前を入力"])
39
25
  userNameLabel.text = readData()
40
-
41
26
  userDefaults.register(defaults: ["SendEmail": "Emailを入力"])
42
27
  sendEmailLabel.text = readData()
43
-
44
28
  userDefaults.register(defaults: ["SendPhone": "電話番号を入力"])
45
29
  sendPhoneLabel.text = readData()
46
-
47
30
  userDefaults.register(defaults: ["NextSendEmail": "Emailを入力"])
48
31
  nextSendEmailLabel.text = readData()
49
-
50
32
  userDefaults.register(defaults: ["NextSendPhone": "電話番号を入力"])
51
33
  nextSendPhoneLabel.text = readData()
52
-
53
34
  }

1

訂正

2020/04/13 14:44

投稿

退会済みユーザー
answer CHANGED
@@ -1,2 +1,53 @@
1
1
  エラーの出る行の上で、
2
- print(userDefaults.object(forKey: "UserName"))ってしてみたらnilって表示されない?
2
+ print(userDefaults.object(forKey: "UserName"))ってしてみたらnilって表示されない?
3
+
4
+ func readData() -> String {
5
+ let str: String = userDefaults.object(forKey: "NickName") as! String
6
+
7
+ let _: String = userDefaults.object(forKey: "UserName") as! String
8
+
9
+ let _: String = userDefaults.object(forKey: "SendEmail") as! String
10
+
11
+ let _: String = userDefaults.object(forKey: "SendPhone") as! String
12
+
13
+ let _: String = userDefaults.object(forKey: "NextSendEmail") as! String
14
+
15
+ let _: String = userDefaults.object(forKey: "NextSendPhone") as! String
16
+
17
+ return str
18
+
19
+ }
20
+
21
+ の中身は3行目いかが意味不明だけど、処理の流れを追っていけば、なんでnilになるかもわかると思う。
22
+
23
+ viewDidLaoadのなかで初期値を設定してる順番とreadDateしている順番を一つ一つみていってください。
24
+
25
+ override func viewDidLoad() {
26
+ super.viewDidLoad()
27
+
28
+ nickNameTextField.delegate = self
29
+ userNameTextField.delegate = self
30
+ sendEmailTextField.delegate = self
31
+ sendPhoneNumber.delegate = self
32
+ nextSendEmailTextField.delegate = self
33
+ nextSendPhoneNumber.delegate = self
34
+
35
+ userDefaults.register(defaults: ["NickName": "ニックネームを入力"])
36
+ nickNameLabel.text = readData()
37
+
38
+ userDefaults.register(defaults: ["UserName": "名前を入力"])
39
+ userNameLabel.text = readData()
40
+
41
+ userDefaults.register(defaults: ["SendEmail": "Emailを入力"])
42
+ sendEmailLabel.text = readData()
43
+
44
+ userDefaults.register(defaults: ["SendPhone": "電話番号を入力"])
45
+ sendPhoneLabel.text = readData()
46
+
47
+ userDefaults.register(defaults: ["NextSendEmail": "Emailを入力"])
48
+ nextSendEmailLabel.text = readData()
49
+
50
+ userDefaults.register(defaults: ["NextSendPhone": "電話番号を入力"])
51
+ nextSendPhoneLabel.text = readData()
52
+
53
+ }