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

質問編集履歴

3

変更

2018/03/18 10:39

投稿

sam3457
sam3457

スコア52

title CHANGED
File without changes
body CHANGED
@@ -202,4 +202,38 @@
202
202
  ref.childByAutoId().setValue(user)
203
203
 
204
204
  }
205
- ```
205
+ ```
206
+
207
+ <追記2>
208
+ newmtさまにお教え頂いた様に記述したところエラーが出たのですが、修正できなかったので私の知っている、String>UIImageにする処理に直してみました。
209
+ ![イメージ説明](d8f021b600cae1f0e2f71539fb783eab.png)
210
+ ``` swift
211
+ extension User {
212
+ // このdictionaryはfirebaseから取得してきたデータ
213
+ init(dictionary: [String: Any]) {
214
+ self.name = dictionary["myName"] as! String
215
+ do {
216
+ /*
217
+ let url = dictionary["iconImage"] as! String
218
+ let data = Data(contentsOf: url)
219
+ let image = UIImage(data: data)!
220
+ self.icon = image
221
+ */
222
+
223
+ let decodeData = (base64Encoded: dictionary["iconImage"])
224
+ let decodedData = Data(base64Encoded: decodeData as! String, options: Data.Base64DecodingOptions.ignoreUnknownCharacters)
225
+ let decodedIcon = UIImage(data: decodedData! as Data)
226
+ self.icon = decodedIcon!
227
+
228
+ } catch {
229
+ // 何かしらのエラー処理
230
+ }
231
+ }
232
+ }
233
+
234
+ ```
235
+ ビルドしてeditProfile.swiftの対応する画面のタブをタップしたところ、editProfile.swiftのviewDidLoadでエラーがおきました。
236
+ as!周りをアンラップしろ。ということまではわかったのですが、この場合どう修正するのでしょうか?
237
+ 私の修正のせいかもしれません、、
238
+ ![イメージ説明](ab5e25ac1e4a24bff052643b4f4b3205.png)
239
+ 調べながらやってはいるのですが、どんどん質問が増えてしまって申し訳ありません、、

2

変更

2018/03/18 10:39

投稿

sam3457
sam3457

スコア52

title CHANGED
File without changes
body CHANGED
@@ -139,4 +139,67 @@
139
139
  上記の二つの機能を追加することを見越したユーザーモデルの定義、またそれをどのような形でfirebaseに送ればいいのでしょうか?
140
140
  皆さまならどのように書いていますでしょうか?
141
141
 
142
- ご存知の方がいらっしゃいましたらよろしくお願いいたします。
142
+ ご存知の方がいらっしゃいましたらよろしくお願いいたします。
143
+
144
+ <追記>
145
+ 変更後
146
+ ``` swift
147
+ import UIKit
148
+
149
+ struct User {
150
+ let name: String
151
+ let icon: UIImage
152
+ }
153
+
154
+ extension User {
155
+ // このdictionaryはfirebaseから取得してきたデータ
156
+ init(dictionary: [String: Any]) {
157
+ self.name = dictionary["myName"] as! String
158
+ do {
159
+ let url = dictionary["iconImage"] as! String
160
+ let data = try Data(contentsOf: url)
161
+ let image = UIImage(data: data)!
162
+ self.icon = image
163
+ } catch {
164
+ // 何かしらのエラー処理
165
+ }
166
+ }
167
+ }
168
+
169
+ ```
170
+ 間違っているのはわかるのですが、どうしてもたどり着けませんでした、、EditProfile.swiftです。
171
+ ```swift
172
+ override func viewDidLoad() {
173
+ super.viewDidLoad()
174
+
175
+ nameTextField.delegate = self
176
+
177
+ ref.queryLimited(toLast: 1).observe(DataEventType.childAdded, with: { (snapshot) in
178
+ let user = User(name: "userName", icon: "userIcon")
179
+ nameTextField.text = user.name
180
+ iconImageView.image = user.icon
181
+
182
+ })
183
+
184
+
185
+ }
186
+
187
+
188
+ ```
189
+ こちらはEditProfile.swiftのプロフィール変更決定ボタンです。キーを変えました。
190
+ ```swift
191
+ @IBAction func changeProfile(_ sender: Any) {
192
+
193
+ let userName = nameTextField.text
194
+
195
+ var data: Data = Data()
196
+ if let image = iconImageView.image {
197
+ data = UIImageJPEGRepresentation(image,0.5)! as Data
198
+ }
199
+ let encodedImageData = data.base64EncodedString(options: Data.Base64EncodingOptions.lineLength64Characters) as String
200
+
201
+ let user = ["userName": userName, "userIcon": encodedImageData]
202
+ ref.childByAutoId().setValue(user)
203
+
204
+ }
205
+ ```

1

2018/03/18 05:57

投稿

sam3457
sam3457

スコア52

title CHANGED
File without changes
body CHANGED
@@ -137,5 +137,6 @@
137
137
 
138
138
 
139
139
  上記の二つの機能を追加することを見越したユーザーモデルの定義、またそれをどのような形でfirebaseに送ればいいのでしょうか?
140
+ 皆さまならどのように書いていますでしょうか?
140
141
 
141
142
  ご存知の方がいらっしゃいましたらよろしくお願いいたします。