Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 来自Firebase数据库的TableViewCell数据_Ios_Swift_Uitableview_Firebase_Firebase Realtime Database - Fatal编程技术网

Ios 来自Firebase数据库的TableViewCell数据

Ios 来自Firebase数据库的TableViewCell数据,ios,swift,uitableview,firebase,firebase-realtime-database,Ios,Swift,Uitableview,Firebase,Firebase Realtime Database,所以基本上我想从我的数据库中获取漏洞,并将它们放在tableView中,但我真的不知道怎么做。我想不出我是如何得到单元格来获得洞号的标题的 这是我的数据库: 这是我的viewcontroller: import UIKit import Firebase class HolesViewController: UITableViewController { //FirebaseRefrences var ref = FIRDatabaseReference.init()

所以基本上我想从我的数据库中获取漏洞,并将它们放在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
    }


}

正如我所看到的,你的
数组实际上是一个当然是快照的数组

如果您想要一个包含所有球场所有洞的阵列,您需要使用以下工具

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)
}
有一次在
孔[indexPath.row]
中有孔快照(每个孔一个快照),只需将单元格
textlab
设置为快照值

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,因此您可以轻松地将这些洞直接读取到数组“洞”中

当为课程_01运行代码时,这些是结果

course name 1
(
    "<null>",
    "hole 1",
    "hole 2",
    "hole 3"
)
Firebase中的数组是从零开始的,因此在第一个示例中,它将NULL赋值给第0个元素。因此,孔1实际上需要是Firebase中数组中的第0个元素

话虽如此,让我们假设有一个特别的事件,全国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阵列的性能非常随机应变,通常是可以避免的


希望这能有所帮助。

天哪,谢谢你,太棒了……一切都正常,但不知怎的,我有一个空的顶部电池?@LB16很好!我刚刚做了一个更新,可能与此有关。如果没有,请花些时间调试孔阵列,看看是否有额外的快照。@LB16如果有任何进展或仍然有任何问题,请告诉我。:)
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