Firebase数据库查询未填充我的数组for tableview

时间:2017-03-30 18:29:40

标签: ios arrays swift uitableview firebase

我想我在这里有一个奇怪的......我正在接受

  

致命错误:在解包可选值时意外发现nil

当我尝试从我的Firebase数据库获取我的tableview数据时。我在我的应用程序的另一部分使用了代码并且它工作得很好,所以不确定为什么它在这里不起作用...

我建立了一个数据模型:

import Foundation
import Firebase
import FirebaseDatabase

class Modules {

    private var _originalModules: String!
    private var _imageUrl: String!
    private var _postKey: String!
    private var _postRef: FIRDatabaseReference!


    var originalModules: String {
        return _originalModules
    }

    var imageUrl: String {
        return _imageUrl
    }

    var postKey: String {
        return _postKey
    }

    init(originalModules: String, imageUrl: String) {
        self._originalModules = originalModules
    //    self._imageUrl = caption
    }

    init(postKey: String, postData: Dictionary<String, AnyObject>) {
        self._postKey = postKey

        if let originalModules = postData["originalModules"] as? String {
            self._originalModules = originalModules

        }

        if let imageUrl = postData["imageUrl"] as? String {
            self._imageUrl = imageUrl


        _postRef = DataService.ds.REF_MODULE.child(_postKey)

        }
    }
}

我认为我已连接到数据库,因为我可以使用以下代码将正确的数据打印到领事中:

DataService.ds.REF_MODULE.queryOrdered(byChild: "originalModules").observe(.value, with: { (snapshot) in

       self.modulesArray = []
if let snapshot = snapshot.children.allObjects as? [FIRDataSnapshot] {
                    for snap in snapshot {
                        print("SNAP: \(snap)")

然后当我尝试将这些数据放入带有下面代码的数组中时,我无法打印到领事中,我收到上述错误。

if let postDict = snap.value as? Dictionary<String, AnyObject>{
                        let key = snap.key as String
                        let post = Modules(postKey: key, postData: postDict)
                        self.modulesArray.insert(post, at: 0)
                        //self.modulesArray.append(post)
                        print ("This is the array from Firebase: \(self.modulesArray)")

该错误还突出显示数据模型中返回_originalModules的行,因此我假设数组为空,因为我没有正确链接数据调用和数组

非常感谢任何和所有帮助!如果您需要任何澄清,请告诉我,以便为我提供解决方案。

UPDATE!数据库结构

{
  "Module" : {
    "originalModules" : {
      "CreatingResults" : "Creating Results",
      "EffectiveCommunication" : "Effective Communication",
      "PresentationSkills" : "Presentation Skills",
      "ProblemSolving" : "Problem Solving",
      "SelfAwareness" : "Self Awareness",
      "Teamwork" : "Teamwork"
    }
  },
   "posts" : {
    "-KcTZfFT58IPT5ZJJRPX" : {
      "caption" : "hello?",
      "imageUrl" : "https://firebasestorage.googleapis.com",
      "likes" : 1
    },
    "-KcTZodrcehJ-VmSU0Lh" : {
      "caption" : "Erin is a nerd",
      "imageUrl" : "https://firebasestorage.googleapis.com",
      "likes" : 1
    },
}

以及它的价值 - tableview代码...

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

      let post = modulesArray[indexPath.row]

        let cell = tableView.dequeueReusableCell(withIdentifier: textCellIdentifier, for: indexPath) as! PerfectPracticeTableViewCell

        cell.configureCell(post: post)

        return cell
    }

和configureCell代码:

class PerfectPracticeTableViewCell: UITableViewCell {


    @IBOutlet weak var ppTableLabel: UILabel!
    @IBOutlet weak var ppTableImage: UIImageView!
    @IBOutlet weak var backgroundCardView: UIView!

    var modulesArray: Modules!



    func configureCell(post: Modules) {
        self.modulesArray = post
        self.ppTableLabel?.text = post.originalModules
      //  cell.ppTableImage?.image = image[(indexPath as NSIndexPath).row]
    }

0 个答案:

没有答案