質問編集履歴

3

変更

2018/03/18 10:39

投稿

sam3457
sam3457

スコア52

test CHANGED
File without changes
test CHANGED
@@ -407,3 +407,71 @@
407
407
  }
408
408
 
409
409
  ```
410
+
411
+
412
+
413
+ <追記2>
414
+
415
+ newmtさまにお教え頂いた様に記述したところエラーが出たのですが、修正できなかったので私の知っている、String>UIImageにする処理に直してみました。
416
+
417
+ ![イメージ説明](d8f021b600cae1f0e2f71539fb783eab.png)
418
+
419
+ ``` swift
420
+
421
+ extension User {
422
+
423
+ // このdictionaryはfirebaseから取得してきたデータ
424
+
425
+ init(dictionary: [String: Any]) {
426
+
427
+ self.name = dictionary["myName"] as! String
428
+
429
+ do {
430
+
431
+ /*
432
+
433
+ let url = dictionary["iconImage"] as! String
434
+
435
+ let data = Data(contentsOf: url)
436
+
437
+ let image = UIImage(data: data)!
438
+
439
+ self.icon = image
440
+
441
+ */
442
+
443
+
444
+
445
+ let decodeData = (base64Encoded: dictionary["iconImage"])
446
+
447
+ let decodedData = Data(base64Encoded: decodeData as! String, options: Data.Base64DecodingOptions.ignoreUnknownCharacters)
448
+
449
+ let decodedIcon = UIImage(data: decodedData! as Data)
450
+
451
+ self.icon = decodedIcon!
452
+
453
+
454
+
455
+ } catch {
456
+
457
+ // 何かしらのエラー処理
458
+
459
+ }
460
+
461
+ }
462
+
463
+ }
464
+
465
+
466
+
467
+ ```
468
+
469
+ ビルドしてeditProfile.swiftの対応する画面のタブをタップしたところ、editProfile.swiftのviewDidLoadでエラーがおきました。
470
+
471
+ as!周りをアンラップしろ。ということまではわかったのですが、この場合どう修正するのでしょうか?
472
+
473
+ 私の修正のせいかもしれません、、
474
+
475
+ ![イメージ説明](ab5e25ac1e4a24bff052643b4f4b3205.png)
476
+
477
+ 調べながらやってはいるのですが、どんどん質問が増えてしまって申し訳ありません、、

2

変更

2018/03/18 10:39

投稿

sam3457
sam3457

スコア52

test CHANGED
File without changes
test CHANGED
@@ -281,3 +281,129 @@
281
281
 
282
282
 
283
283
  ご存知の方がいらっしゃいましたらよろしくお願いいたします。
284
+
285
+
286
+
287
+ <追記>
288
+
289
+ 変更後
290
+
291
+ ``` swift
292
+
293
+ import UIKit
294
+
295
+
296
+
297
+ struct User {
298
+
299
+ let name: String
300
+
301
+ let icon: UIImage
302
+
303
+ }
304
+
305
+
306
+
307
+ extension User {
308
+
309
+ // このdictionaryはfirebaseから取得してきたデータ
310
+
311
+ init(dictionary: [String: Any]) {
312
+
313
+ self.name = dictionary["myName"] as! String
314
+
315
+ do {
316
+
317
+ let url = dictionary["iconImage"] as! String
318
+
319
+ let data = try Data(contentsOf: url)
320
+
321
+ let image = UIImage(data: data)!
322
+
323
+ self.icon = image
324
+
325
+ } catch {
326
+
327
+ // 何かしらのエラー処理
328
+
329
+ }
330
+
331
+ }
332
+
333
+ }
334
+
335
+
336
+
337
+ ```
338
+
339
+ 間違っているのはわかるのですが、どうしてもたどり着けませんでした、、EditProfile.swiftです。
340
+
341
+ ```swift
342
+
343
+ override func viewDidLoad() {
344
+
345
+ super.viewDidLoad()
346
+
347
+
348
+
349
+ nameTextField.delegate = self
350
+
351
+
352
+
353
+ ref.queryLimited(toLast: 1).observe(DataEventType.childAdded, with: { (snapshot) in
354
+
355
+ let user = User(name: "userName", icon: "userIcon")
356
+
357
+ nameTextField.text = user.name
358
+
359
+ iconImageView.image = user.icon
360
+
361
+
362
+
363
+ })
364
+
365
+
366
+
367
+
368
+
369
+ }
370
+
371
+
372
+
373
+
374
+
375
+ ```
376
+
377
+ こちらはEditProfile.swiftのプロフィール変更決定ボタンです。キーを変えました。
378
+
379
+ ```swift
380
+
381
+ @IBAction func changeProfile(_ sender: Any) {
382
+
383
+
384
+
385
+ let userName = nameTextField.text
386
+
387
+
388
+
389
+ var data: Data = Data()
390
+
391
+ if let image = iconImageView.image {
392
+
393
+ data = UIImageJPEGRepresentation(image,0.5)! as Data
394
+
395
+ }
396
+
397
+ let encodedImageData = data.base64EncodedString(options: Data.Base64EncodingOptions.lineLength64Characters) as String
398
+
399
+
400
+
401
+ let user = ["userName": userName, "userIcon": encodedImageData]
402
+
403
+ ref.childByAutoId().setValue(user)
404
+
405
+
406
+
407
+ }
408
+
409
+ ```

1

2018/03/18 05:57

投稿

sam3457
sam3457

スコア52

test CHANGED
File without changes
test CHANGED
@@ -276,6 +276,8 @@
276
276
 
277
277
  上記の二つの機能を追加することを見越したユーザーモデルの定義、またそれをどのような形でfirebaseに送ればいいのでしょうか?
278
278
 
279
+ 皆さまならどのように書いていますでしょうか?
280
+
279
281
 
280
282
 
281
283
  ご存知の方がいらっしゃいましたらよろしくお願いいたします。