回答編集履歴
5
処理を一部修正しました。
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
|
-
|
78
|
+
self?.nameTextField.text = user.name
|
76
|
-
|
79
|
+
self?.iconImageView.image = user.icon
|
80
|
+
}
|
77
81
|
}
|
78
82
|
})
|
79
83
|
```
|
4
一部修正しました。
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
一部修正しました。
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
一部修正しました。
answer
CHANGED
@@ -41,7 +41,10 @@
|
|
41
41
|
|
42
42
|
// dictionaryに対するエラーチェックは省略しています
|
43
43
|
do {
|
44
|
-
let
|
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
一部修正と追記を行いました。
answer
CHANGED
@@ -6,13 +6,13 @@
|
|
6
6
|
例えば、プロフィール設定画面に初期値としてfirebaseから既存のデータを設定する場合、Dictionaryを使用していますと、
|
7
7
|
|
8
8
|
```
|
9
|
-
myProfileLabel.text = user["
|
9
|
+
myProfileLabel.text = user["userName"] as? String
|
10
10
|
```
|
11
11
|
という形で設定できますが、
|
12
12
|
|
13
13
|
```
|
14
|
-
// ↓本当は
|
14
|
+
// ↓本当はuserName
|
15
|
-
myProfileLabel.text = user["
|
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["
|
40
|
+
self.username = dictionary["userName"] as! String
|
41
|
+
|
42
|
+
// dictionaryに対するエラーチェックは省略しています
|
41
43
|
do {
|
42
|
-
let url = dictionary["
|
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
|
+
```
|