[Ios] Данные TableViewCell из базы данных Firebase



Answers

Я дам вам некоторую информацию об этой теме, а затем сделаю все возможное, чтобы поговорить с вами об этом.

Во-первых, учитывая следующую структуру:

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"
)

а затем, когда мы запустим его для курса_02 ...

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

Массив в Firebase равен нулю, поэтому он присваивает NULL 0-му элементу в первом примере. Таким образом, отверстие # 1 действительно должно было быть 0-м элементом в массиве Firebase.

Это, как говорится, позволяет сказать, что есть специальное мероприятие, National # 7 day. Поэтому вы хотите изменить название отверстия # 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 очень ситуативна и обычно ее можно избежать.

Надеюсь, это поможет.

Question

Поэтому в основном я хочу получить Holes из моей базы данных и поместить их в tableView, но я действительно не знаю, как это сделать. Я не могу понять, как я получаю ячейки, чтобы получить название по числу отверстий.

Вот моя база данных:

Вот мой контроллер view:

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
    }


}



Links