我有一个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: "")
}
}
)
}
答案 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。在这种情况下,我们使用一个简单的字符串,但它可以是一个消息对象数组,可以包含消息,发送者的名称甚至他们的图像。