ios Swift Firebase发送不规则数据

时间:2017-06-24 22:49:26

标签: ios firebase swift3

我有一个collectionView,我正在获取firebase数据库数据。我的collectionView创建发送firebase indexpath.row。这行0,1,2,3 ......但是firebase响应不规则数据和ı见debug mod indexpath.row 16,3,7,11 ......

问题是什么?

我分享了我的示例代码。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
     print(indexPath.row) // 1, 2, 3, 4
                self.ref.child(userID!).child(self.islemString).child(String(indexPath.row + 1)).observeSingleEvent(of: .value, with: { (snapshot) in
                        // Get user value

                        let value = snapshot.value as? NSDictionary
                        let asd = value?["xxx"] as? Int ?? 0

                        print(indexPath.row) // 16, 3, 7 ,9 

                        if(asd == 0) {
                            cell.imageKilit.image = UIImage(named: "kilit")

                        }
                        else{
                            cell.imageKilit.image = UIImage(named: "")

                        }


                    }

                    )

}

1 个答案:

答案 0 :(得分:0)

回应OP的评论,要求提供示例代码:

以下是一个示例,但我不知道您的Firebase中存储了什么,因此我们只使用消息结构作为示例

messages
  msg_0
    msg: "Hello!"
  msg_1
    msg: "Another msg

当应用程序启动时,我们将在viewDidLoad中使用此代码来初始填充一个数组,该数组将用作我们的collectionView,tableView等的数据源。

var messagesArray = [String]()
var ref = //set to your firebase database

func viewDidLoad() {
    let messagesRef = self.ref.child("messages")
    messagesRef.observeSingleEvent(of: .value, with: { snapshot in
        for child in snapshot.children {
            let msgDict = child.value as! [String: AnyObject]
            let msg = msgDict["msg"] as! String
            self.messagesArray.append(msg)
        }

        self.myCollectionView.reloadData()
    })
}

然后,在集合视图中委托方法

func collectionView(_ collectionView: UICollectionView, cellForItemAt in...
   let msg = self.messagesArray[indexPath.row]
   //do something with the msg
}

正如您所看到的,当您滚动浏览tableView时,它只从dataSource数组中提取数据,而不是经常为每行数据点击Firebase。在这种情况下,我们使用一个简单的字符串,但它可以是一个消息对象数组,可以包含消息,发送者的名称甚至他们的图像。