簡體   English   中英

來自Firebase數據庫的TableViewCell數據

[英]TableViewCell Data from Firebase Database

所以基本上我想從我的數據庫中獲取Holes並將它們放在tableView中,但我真的不知道如何。 我無法弄清楚如何讓細胞獲得洞數的標題。

這是我的數據庫: 結構體

這是我的viewcontroller:

import UIKit
import Firebase

class HolesViewController: UITableViewController {


    //FirebaseRefrences
    var ref = FIRDatabaseReference.init()

    var holes: [FIRDataSnapshot]! = []

    override func viewDidLoad() {

        //ViewDidLoad


        //Refrences to Firebase

        ref = FIRDatabase.database().reference()
        let CoursesRef = ref.child("Courses")


        //snapshot

        CoursesRef.observeEventType(.ChildAdded, withBlock: { snapshpt in



            self.holes.append(snapshpt)



            self.tableView.reloadData()

        })


    }

    override func viewDidAppear(animated: Bool) {

        //ViewDidAppear
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return self.holes.count

    }

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

        let cell: UITableViewCell! = self.tableView.dequeueReusableCellWithIdentifier("HoleCell")

        let holesSnap = self.holes[indexPath.row]

        /*

         ??????

        */
        return cell
    }

    override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {

        return true
    }


}

我可以看到你的holes數組實際上是一個Course快照數組。

如果你想要一個包含所有課程所有漏洞的數組,你需要使用以下內容

self.holes = snapshpt.childSnapshotForPath("Holes").children.allObjects as [FIRDataSnapshot]

如果您只想獲得特定課程的漏洞,您應該像這樣檢索您的數據

ref.child("Courses").child(courseId).child("Holes").observeEventType(.ChildAdded withBlock: { snapshot in
   self.holes.append(snapshot)
}

有一次你在holes[indexPath.row]有Holes快照(每個孔一個快照),你只需要將單元格textLabel設置為快照值。

cell.textLabel = holes[indexPath.row].value as! String

我將為您提供有關此主題的一些信息,然后盡力以這種方式告訴您。

首先,給出以下結構:

courses
   course_01
     holes
      1: hole 1
      2: hole 2
      3: hole 3
     name: course name 1
   course_02
     holes
      0: hole 0
      1: hole 1
      2: hole 2
     name: course name 2

和一些Firebase代碼來讀取數據

    self.myRootRef.childByAppendingPath("courses/course_01")

    thisCourseRef.observeSingleEventOfType(.Value, withBlock: { snapshot in

         let name = snapshot.value["name"] as! String
         let holes = snapshot.value["holes"] as! NSArray
         print(name)
         print(holes)
    })

首先要注意的是Firebase直接支持NSArray,因此您可以輕松地將孔直接讀入數組“孔”

當為course_01運行代碼時,這些是結果

course name 1
(
    "<null>",
    "hole 1",
    "hole 2",
    "hole 3"
)

然后當我們為course_02運行它時......

course name 2
(
    "hole 0",
    "hole 1",
    "hole 2"
)

Firebase中的數組基於零,因此它在第一個示例中為第0個元素分配NULL。 因此,#1洞真的需要成為Firebase數組中的第0個元素。

話雖這么說,讓我們說有一個特殊的事件,全國#7天。 所以你想把#7洞的名字改成別的......說'第7洞,關心的洞'

使用Firebase陣列時,您必須讀入並覆蓋整個節點(“洞”節點,lol),因為您無法訪問陣列中的各個元素。

更好的選擇是格式化您的Firebase結構:

holes
  -Y9989jaik9
     name: hole 0
     hole_num: 0
  -Juiijaie898
     name: hole 1
     hole_num: 1
  .
  .
  .
  -Ykmi9mms9889
     name: Hole 7, the hole that cares
     hole_num: 7

而真正酷的是你可以動態地重命名這些洞,而無需編輯或更新其他洞中的數據。

底線是Firebase陣列是非常情況化的,通常可以避免。

希望有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM