我有一个从Firebase数据库中检索数据的应用程序。我的问题是,每当数据更新时,它都会检索一个全新的数据数组(并将其附加到数组的末尾)。例如,如果我的数组是:
["A", "B", "C", "D", "E"]
我尝试删除D(在tableView中;当我滑动删除时,它会从Firebase中删除条目),数组变为
["A", "B", "C", "E", "A", "B", "C", "E"]
我在返回数组之前尝试使用数组removeAll()
方法,但我的tableView在完成之前刷新;所以它崩溃说索引超出范围。无论如何,我可以在我的数据库更新函数中创建第二个数组,然后使用我的主数组调用合并方法,并防止每次都添加重复项?谢谢!
代码:
self.conditionRef.observeEventType(FIRDataEventType.Value, withBlock: { (snapshot) in
self.stocks.removeAll()
self.stockObjects.removeAll()
if snapshot.value is NSNull {
print("nothing found")
self.title = "No Results"
}
else {
for i in snapshot.children {
self.stocks.append(i.key)
}
print(self.stocks)
}
for stock in self.stocks {
let stockSnapshot = self.conditionRef.child(stock)
stockSnapshot.observeEventType(FIRDataEventType.Value, withBlock: { (snapshot) in
if snapshot.value is NSNull {
print("nothing found")
} else {
let price = snapshot.childSnapshotForPath("price").value as! String
let volume = snapshot.childSnapshotForPath("volume").value as! String
let stockObj = StockObject(name: stock, price: price, volume: volume)
self.stockObjects.append(stockObj)
print(stockObj.name)
print(stockObj.price)
print(stockObj.volume)
}
self.tableView.reloadData()
})
}
})
更新:我通过将我的StockObject类转换为equatable并将此函数添加到类中来解决了我的问题:
func == (lhs: StockObject, rhs: StockObject) -> Bool {
return lhs.name == rhs.name
}
然后,在我上面的代码中,我用这个替换了我追加到数组的行:
if self.stockObjects.contains(stockObj) == false {
self.stockObjects.append(stockObj)
}
到目前为止,一切正常。关于这可能会崩溃的任何想法?