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

回答編集履歴

5

処理を一部修正しました。

2018/03/19 10:34

投稿

newmt
newmt

スコア1277

answer CHANGED
@@ -72,8 +72,12 @@
72
72
  print(dict)
73
73
 
74
74
  let user = User(dictionary: dict)
75
+
76
+ // メインスレッドで処理をする
77
+ DispatchQueue.main.async { [weak self] in
75
- nameTextField.text = user.name
78
+ self?.nameTextField.text = user.name
76
- iconImageView.image = user.icon
79
+ self?.iconImageView.image = user.icon
80
+ }
77
81
  }
78
82
  })
79
83
  ```

4

一部修正しました。

2018/03/19 10:34

投稿

newmt
newmt

スコア1277

answer CHANGED
@@ -42,17 +42,14 @@
42
42
  // dictionaryに対するエラーチェックは省略しています
43
43
  do {
44
44
  let urlString = dictionary["userIcon"] as! String
45
+ let decodedData = Data(base64Encoded: urlString, options: Data.Base64DecodingOptions.ignoreUnknownCharacters)
46
+ let decodedIcon = UIImage(data: decodedData!)
47
+ self.icon = decodedIcon!
45
48
 
46
- // ごめんなさい間違えてました
47
- let url = URL(string: urlString)!
48
- let data = try Data(contentsOf: url)
49
- let image = UIImage(data: data)!
50
- self.icon = image
51
49
  } catch {
50
+        // 何かしらのエラー処理をするまたは
52
51
  // ※ダミーの画像などで初期化が必要
53
- self.icon = UIImage()]
52
+ self.icon = UIImage()
54
-
55
- // 何かしらのエラー処理
56
53
  }
57
54
  }
58
55
  }

3

一部修正しました。

2018/03/18 22:08

投稿

newmt
newmt

スコア1277

answer CHANGED
@@ -45,7 +45,7 @@
45
45
 
46
46
  // ごめんなさい間違えてました
47
47
  let url = URL(string: urlString)!
48
- let data = try Data(contentsOf: url!)
48
+ let data = try Data(contentsOf: url)
49
49
  let image = UIImage(data: data)!
50
50
  self.icon = image
51
51
  } catch {

2

一部修正しました。

2018/03/18 21:58

投稿

newmt
newmt

スコア1277

answer CHANGED
@@ -41,7 +41,10 @@
41
41
 
42
42
  // dictionaryに対するエラーチェックは省略しています
43
43
  do {
44
- let url = dictionary["userIcon"] as! String
44
+ let urlString = dictionary["userIcon"] as! String
45
+
46
+ // ごめんなさい間違えてました
47
+ let url = URL(string: urlString)!
45
48
  let data = try Data(contentsOf: url!)
46
49
  let image = UIImage(data: data)!
47
50
  self.icon = image

1

一部修正と追記を行いました。

2018/03/18 21:57

投稿

newmt
newmt

スコア1277

answer CHANGED
@@ -6,13 +6,13 @@
6
6
  例えば、プロフィール設定画面に初期値としてfirebaseから既存のデータを設定する場合、Dictionaryを使用していますと、
7
7
 
8
8
  ```
9
- myProfileLabel.text = user["username"] as? String
9
+ myProfileLabel.text = user["userName"] as? String
10
10
  ```
11
11
  という形で設定できますが、
12
12
 
13
13
  ```
14
- // ↓本当はusername
14
+ // ↓本当はuserName
15
- myProfileLabel.text = user["usernema"] as? String
15
+ myProfileLabel.text = user["userNema"] as? String
16
16
 
17
17
  ```
18
18
  といった間違いをした場合にアプリ実行中に落ちる可能性があります。
@@ -37,17 +37,43 @@
37
37
  extension User {
38
38
  // このdictionaryはfirebaseから取得してきたデータ
39
39
  init(dictionary: [String: Any]) {
40
- self.username = dictionary["username"] as! String
40
+ self.username = dictionary["userName"] as! String
41
+
42
+ // dictionaryに対するエラーチェックは省略しています
41
43
  do {
42
- let url = dictionary["postImage"] as! String
44
+ let url = dictionary["userIcon"] as! String
43
45
  let data = try Data(contentsOf: url!)
44
46
  let image = UIImage(data: data)!
45
47
  self.icon = image
46
48
  } catch {
49
+ // ※ダミーの画像などで初期化が必要
50
+ self.icon = UIImage()]
51
+
47
52
  // 何かしらのエラー処理
48
53
  }
49
54
  }
50
55
  }
51
56
  ```
52
57
 
53
- 一意見ですので、ぜひ他の方のご意見も参考してみてください。
58
+ 一意見ですので、ぜひ他の方のご意見も参考してみてください。
59
+
60
+
61
+ 【追記】
62
+
63
+ Userインスタンスを作成するのは下記のような形でできませんでしょうか?
64
+
65
+ ```
66
+ ref.queryLimited(toLast: 1).observe(DataEventType.value, with: { (snapshot) in
67
+        
68
+ for item in snapshot.children {
69
+ let snap = item as! DataSnapshot
70
+ let dict = snap.value as! [String: Any]
71
+         // データの中身を確認
72
+ print(dict)
73
+
74
+ let user = User(dictionary: dict)
75
+ nameTextField.text = user.name
76
+ iconImageView.image = user.icon
77
+ }
78
+ })
79
+ ```