我正在使用firebase数据填充UITableView。
我一直在使用相同的过程以相同的方式创建多个tableview(我正在复制并粘贴以前的代码并根据需要修改它),所以我确信它有效。
但是,在这种情况下,我遇到了填充单元格的tableview数组的问题。虽然我可以看到我的firebase查询块正在提取两个不同的数据集,但是当我告诉它追加每个对象时(在本例中标题为Round()),它只追加第一个,多次因为有物体。这是我的代码:
let cellId = "cellId"
var roundArray = [Round]()
let activeCourse = UserDefaults.standard.string(forKey: "activeCourse")
let ref = Database.database().reference()
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style:.plain, target: self, action: #selector(handleBack))
navigationItem.title = "Choose Round to Review"
self.clearsSelectionOnViewWillAppear = false
}
override func viewWillAppear(_ animated: Bool) {
let round = Round()
let UID = Auth.auth().currentUser!.uid
ref.child("userRoundData").child(UID).queryOrdered(byChild: "RoundScore").observe( .childAdded, with: { snapshot in
if let value = snapshot.value as? [String: AnyObject] {
round.name = value["RoundName"] as! String?
round.date = value["RoundDate"] as! String?
round.score = value["RoundScore"] as! Int?
round.putts = value["RoundPutts"] as! Int?
round.tees = value["RoundTees"] as! String?
round.FIR = value["roundFIR"] as! Int?
round.GIR = value["roundGIR"] as! Int?
round.is9or18 = value["Round9or18"] as! String?
round.possibleFIR = value["roundPossibleFIR"] as! Int?
round.course = value["RoundCourse"] as! String?
if round.is9or18 == "Eighteen" {
round.possibleGIR = 18
} else {
round.possibleGIR = 9
}
round.FIRPercentage = (Float(round.FIR!) / Float(round.possibleFIR!))
round.GIRPercentage = (Float(round.GIR!) / Float(round.possibleGIR!))
print(round.name!)
print(round)
self.roundArray.append(round)
print(self.roundArray)
DispatchQueue.main.async(execute: {
self.tableView.reloadData()
})
}
})
self.ref.removeAllObservers()
}
以下是我的控制台中的打印输出。它表明round.name有两个条目,但是当我追加时,你可以看到最后附加的两个对象是相同的。
Round played at Eagle Trace Golf Club 07-16-2017 from Gold tees
<NoteCaddieNotes.Round: 0x7f9ec8016400>
[<NoteCaddieNotes.Round: 0x7f9ec8016400>]
Round played at Riverdale Golf Course - Dunes 07-13-2017 from Gold tees
<NoteCaddieNotes.Round: 0x7f9ec8016400>
[<NoteCaddieNotes.Round: 0x7f9ec8016400>, <NoteCaddieNotes.Round: 0x7f9ec8016400>]
我的问题是......为什么?!?!?!哈哈哈,这非常令人沮丧,我不知道还能做些什么。我可以补充一点,这是我在swift中的第一个项目,总的来说是编码。所以我可能没有完全理解它是显而易见的。
答案 0 :(得分:2)
是不是因为您在RoundW对象的创建只在ViewWillAppear上发生一次,而不是在将值添加到该对象时?
let round = Round()
此行应该是
后观察闭包的一部分if let value = snapshot.value as? [String: AnyObject]
很抱歉会添加评论,但还没有评论权。