

# やりたいこと

_FirstView_ から _TableView_ へ画面遷移した時に，1月の値がインクリメントされ，値が多い順に上から _Cell_ に表示する．

# これまでの流れ

  1. 新しいプロジェクトを作成する．
  2. _Firebase_ とアプリを接続する．
  3. **写真1** のようにオブジェクトを配置する．
  4. **コード1** と **コード2** を記述する．
  5. **写真3** のように _Realtime Database_ を構成する．
  6. プロジェクトを実行すると **写真4** のようになる．

# 問題点

1月が _Cell_ に表示されない．  
（インクリメントする月を変えても，そのインクリメントした月が表示されない．）  
（*print() _で_ Log*を監視しても表示がない．）

# コード1

_ViewController.swift_

[code]

    import UIKit
    import Firebase
    
    class ViewController: UIViewController {
    
        var ref: DatabaseReference!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            self.ref = Database.database().reference().child("This")
        }
    
        override func viewWillDisappear(_ animated: Bool) {
            super.viewWillDisappear(animated)
    
            self.ref.child("1月").runTransactionBlock { (MutableData) -> TransactionResult in
                if let inc = MutableData.value as? Int {
                    MutableData.value = inc + 1
                }
                return TransactionResult.success(withValue: MutableData)
            }
        }
    }
    
[/code]

# コード2

_TableViewController.swift_

[code]

    import UIKit
    import Firebase
    
    class TableViewController: UITableViewController {
    
        @IBOutlet var list: UITableView!
        var ref: DatabaseReference!
        var rank = [(key: String, value: Int)]()
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            self.ref = Database.database().reference().child("This")
            self.ref.observeSingleEvent(of: .value) { (DataSnapshot) in
                let namesArray = DataSnapshot.value as! [String: Int]
                self.rank = namesArray.sorted {$0.value > $1.value}
                self.list.reloadData()
            }
        }
    
        override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return self.rank.count
        }
    
        override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCell(withIdentifier: "listCell", for: indexPath)
            cell.textLabel?.text = self.rank[indexPath.row].key
            cell.detailTextLabel?.text = String(self.rank[indexPath.row].value)
            return cell
        }
    }
    
[/code]

# 写真1

_Main.storyboard_  
[![](https://i.stack.imgur.com/DgS16.png)](https://i.stack.imgur.com/DgS16.png)

# 写真2

構成  
[![](https://i.stack.imgur.com/MV4Ab.png)](https://i.stack.imgur.com/MV4Ab.png)

# 写真3

_Firebase_  
[![](https://i.stack.imgur.com/4uoec.png)](https://i.stack.imgur.com/4uoec.png)

# 写真4

デバイス上  
[![](https://i.stack.imgur.com/2jXSI.png)](https://i.stack.imgur.com/2jXSI.png)

# 環境

xcode : ver11.0  
Swift : ver5.1  
iOS : ver13.1.2

# 最後に

お力をお貸しください．宜しくお願い致します．  
（分かり難所があれば言ってください）


CC BY-SA 4.0
2019-10-06T02:45:02.177
59500
2019-10-06T07:16:17.510
2019-10-06T07:16:17.510
3060
question
swift ios xcode firebase uitableview
iOSアプリで画面遷移に伴うFirebaseのバグ