やりたいこと
__FirstView__から__SecondView__へ画面遷移した時に,__Firebase__の値を更新し,その値を__Firebase__から読み取って__SecondView__で表示する.
これまでの流れ
- 新しいプロジェクトを作成する.
- __Firebase__とアプリを接続する.
- 写真1のようにオブジェクトを配置する.
- コード1とコード2を記述する.
- 写真3のように__Realtime Database__を構成する.
- プロジェクトを実行すると__FirestView__では__print(Array)__が実行されるが,__SecondView__へ画面遷移を行うと,__SecondView__では__print("error")__が実行される.
コード1
ViewController.swift
Swift
1import UIKit 2import Firebase 3 4class ViewController: UIViewController { 5 6 var ref: DatabaseReference! 7 var value: Int = 0 8 9 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 14 self.ref = Database.database().reference() 15 self.ref.observeSingleEvent(of: .value) { (DataSnapshot) in 16 guard let Array = DataSnapshot.value as? [String: Int] else { 17 print("error") 18 return 19 } 20 print(Array) //["値": 3] 21 } 22 } 23 24 25 26 @IBAction func increment(_ sender: UIButton) { 27 self.value += 1 28 } 29 30 31 32 override func viewWillDisappear(_ animated: Bool) { 33 super.viewWillDisappear(animated) 34 35 self.ref.child("値").runTransactionBlock { (MutableData) -> TransactionResult in 36 if let value = MutableData.value as? Int { 37 MutableData.value = value + self.value 38 self.value = 0 39 } 40 return TransactionResult.success(withValue: MutableData) 41 } 42 } 43}
コード2
SecondViewController.swift
Swift
1import UIKit 2import Firebase 3 4class SecondViewController: UIViewController { 5 6 var ref: DatabaseReference! 7 8 @IBOutlet weak var label: UILabel! 9 10 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 } 15 16 17 18 override func viewDidAppear(_ animated: Bool) { 19 super.viewDidAppear(animated) 20 21 self.ref = Database.database().reference() 22 self.ref.observeSingleEvent(of: .value) { (DataSnapshot) in 23 guard let Array = DataSnapshot.value as? [String: Int] else { 24 print("error") //error 25 self.label.text = "error" 26 return 27 } 28 print(Array) 29 if let value = Array["値"] { 30 self.label.text = String(value) 31 } 32 } 33 } 34}
写真1
写真2
写真3
写真4
写真5
実際のアプリに近づけた構成
__detail__で値を増やし,__detail__から__Second__へ画面遷移をした際に__Firebase__への書き込みと書き出しを行う.
その際に問題が発生する.
環境
xcode : ver11.0
Swift : ver5.1
iOS : ver13.1.2
最後に
お力をお貸しください.宜しくお願い致します.
(分かり難所があれば言ってください)
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。