ios - swift 2 火力地堡 TableView

标签 ios swift firebase firebase-realtime-database

我是 swift 和 firebase 的新手,我正在尝试用 firebase 数据填充我的 tabelview。当我运行该程序时,tableview 中没有显示任何内容。任何帮助将不胜感激。这就是我所做的,试图阅读文档,但没有帮助。

import UIKit
import Firebase
import FirebaseUI


class ChurchTableViewController: UITableViewController {


let firebase = Firebase(url:"https://.....com/")

var items = [NSDictionary]()

override func viewDidLoad() {
    super.viewDidLoad()

    // Uncomment the following line to preserve selection between presentations
    // self.clearsSelectionOnViewWillAppear = false

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
     //self.navigationItem.rightBarButtonItem = self.editButtonItem()
}

override func viewDidAppear(animated: Bool) {

    //MARK: Load data from firebsr
    firebase.observeEventType(.Value, withBlock: { snapshot in
        print(snapshot.value)
        }, withCancelBlock: { error in
            print(error.description)
    })

}


override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return items.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)

    let dict = items[indexPath.row]
    cell.textLabel?.text = dict["ChurchName"] as? String

    return cell
}

最佳答案

您已经为您的 Firebase 数据库中的某些值发生变化时创建了观察者,但是在您的闭包中您需要添加新项目,当然还需要重新加载您的 UITableView 以同步您应用中的数据,请参阅以下代码以了解如何使用示例数据类型执行此操作的示例:

var items = [GroceryItem]()

override func viewDidAppear(animated: Bool) {
     super.viewDidAppear(animated)

     firebase.observeEventType(.Value, withBlock: { snapshot in
        var newItems = [GroceryItem]()

        for item in snapshot.children {
          let itemType = GroceryItem(snapshot: item as! FDataSnapshot)
          newItems.append(itemType)
        }

        // update your item with the new ones retrieved
        self.items = newItems

        // reload the data
       self.tableView.reloadData()
    })
}

在下面的结构中,您可以看到如何根据 Firebase 返回的数据创建数据类型的示例

GroceryItem

struct GroceryItem {

   let key: String!
   let name: String!
   let addedByUser: String!
   let ref: Firebase?
   var completed: Bool!

   // Initialize from arbitrary data
   init(name: String, addedByUser: String, completed: Bool, key: String = "") {
     self.key = key
     self.name = name
     self.addedByUser = addedByUser
     self.completed = completed
     self.ref = nil
   }

   init(snapshot: FDataSnapshot) {
     key = snapshot.key
     name = snapshot.value["name"] as! String
     addedByUser = snapshot.value["addedByUser"] as! String
     completed = snapshot.value["completed"] as! Bool
     ref = snapshot.ref
   }
}

要更深入地了解如何使用 Firebase,您可以阅读这个非常好的教程:

希望对你有帮助

关于ios - swift 2 火力地堡 TableView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36681968/

相关文章:

ios - UICollectionView 水平滚动

swift - SwiftUI 中的 ImagePicker

android - 从 firebase 获取数据快照时出错 -> java.lang.NumberFormatException : Invalid int: ""

ios - Swift Csv 解析器对双引号的支持

ios - 未从文件夹 base.lproj 复制本地化的 XIB 文件

c - 使用 calloc 函数快速初始化 UnsafeMutableRawPointer 中的值

firebase - 在Cloud Firestore中更新用户数据

android - 为 Android 构建 react-native-firebase 时的依赖冲突(多个 dex 文件定义 Lcom/google/firebase/iid/zzb$1)

ios - 如何在 xcode 4.2 Storyboard中正确使用模态视图 Controller

ios - Swift ios 不确定如何在使用 Storyboard id 时将导航栏添加到 Storyboard 中的 VC