这里得到的数据是我的情景:填充的tableView从火力地堡
1)数据源到我的tableView是一个数组称为books
- var books:[BookItem]
2)我填充books
随时以dB为单位的一些数据已经改变
3)我通过连接来自两个表的数据创建BookItem
,因为BookItem
包含一些用户特定的数据和一些关于该书本身的一般数据。
我写了一个名为createDataSource
方法,该方法填充books
阵列BookItem
小号
func createDataSource()
{
self.books.removeAll()
let userId:String = UserDefaults.standard.value(forKey: "UserId") as! String
let bookForUserRef = self.ref!.child("users").child(userId).child("userbooks")
bookForUserRef.observe(.value, with: { snapshot in
var i = 0
for element in snapshot.children
{
i = i + 1
let item:FIRDataSnapshot = element as! FIRDataSnapshot
let postDict = item.value as! [String : AnyObject]
let key = item.key
let booksRef = self.ref!.child("books").child(key)
booksRef.observe(.value, with: { snapshot in
let bookItem = (snapshot as! FIRDataSnapshot).value as! [String : AnyObject]
let id = booksRef.key
print(id)
let record = [bookItem["title"] as! String, bookItem["author"] as! String, "0", "\(bookItem["pagesCount"] as! Int)"]
let item = BookItem(title: bookItem["title"] as! String, author: bookItem["author"] as! String, pagesCount: bookItem["pagesCount"] as! Int, currentPage: postDict["currentPage"] as! Int, language: bookItem["language"] as! String, year: nil, ISBN: nil, id: id, added: postDict["added"] as? String ?? "21")
self.books.append(item)
self.tableView.reloadData()
})
}
})
}
每当我调用这个方法,所有现有的元素获取books
阵列复制的照顾。
我认为它可能与循环有关,但调试后,它似乎没问题。
我想在firebase中有一些特定的观察者可以重复这些元素。我对firebase相当陌生,我想我的方法可能有点混乱和混乱。
createDataSource()
方法中应该修改什么,摆脱元素重复?
此外,我的方法来使用firebase和tableView正确吗?
你应该看看你的循环和观察员,它看起来有点怪。你有没有试图把'self.books.removeAll()'放在第一个值观察者的开头?如果这样的话你应该把'self.tableView.reloadData()'移到第一个观察者的末尾。 – ntoonio