我有一個小應用程序,可以跟蹤玩家在體育比賽中玩的時間。我有一個體育比賽列表,你可以點擊進入並開始跟蹤比賽細節。我試圖做到這一點,如果遊戲正在進行並且用戶返回到遊戲列表,那麼他們不能點擊另一個遊戲單元格,因爲它會覆蓋活動遊戲中的所有當前數據。TableViewCell不按預期方式重新加載
我幾乎完成了這項工作。當遊戲進行時,我回到體育遊戲列表中,只有活動遊戲可以訪問,並向用戶顯示它是活躍的。但是當我回去重新設置遊戲時,我期望所有體育遊戲的tableView都可以訪問。但他們不是。它仍然只顯示一個活動的遊戲,其他所有遊戲都無法訪問。我在viewWillAppear中使用tableView.reloadData。我也在下面顯示了相關的代碼。
// gameViewController -> shows all the games you can track
override func viewWillAppear(_ animated: Bool) {
self.tableView.reloadData()
for game in fetchedResultsController.fetchedObjects! {
print("Game Opposition is \(game.opposition)")
print("Is Playing? \(game.isPlaying)")
print("Current Playing Time \(game.currentGameTime)")
print("----------------------")
}
}
// game cell view controller -> checks to see if any games are in progress
func isAnyGamesInProgress(games: [Game]) -> Bool {
let inProgressGames = games.filter({ Int($0.currentGameTime) > 0 && $0.gameComplete == false })
if inProgressGames.isEmpty {
return false
}
return true
}
// configures the games cells in tableview
func configureFixtureCell(fixture: Game){
oppositionLabel.text = "\(fixture.team.name) v \(fixture.opposition)"
// check if any games are currently in progress, if so disable all the other cells
// this prevents a user being mid game and checking an old game and inadvertently updating all the played time values
let games = fixture.team.game?.allObjects as! [Game]
if isAnyGamesInProgress(games: games){
isUserInteractionEnabled = false
inPlayLabel.isHidden = true // identifies that this game is in progress
}
// unset the sole game who's in progress
if Int(fixture.currentGameTime) > 0 && !fixture.gameComplete {
isUserInteractionEnabled = true // makes this cell active
// show label as green dot
inPlayLabel.isHidden = false
inPlayLabel.layer.cornerRadius = 8
inPlayLabel.layer.masksToBounds = true
}
}
現在這個工程,當我有一個遊戲進行中。我回到遊戲列表中,並且可以訪問活動的遊戲並顯示小標籤和所有其他遊戲單元不活動。但是如果我回去重置遊戲,所以它不再活躍,所有的遊戲都應該顯示並且可以訪問。但是活躍的遊戲仍然顯示爲活躍遊戲,所有其他遊戲單元都無法訪問。
我已經確認,當我通過在configureFixtureCell()中的isAnyGamesInProgress()調用中打印出消息來重置遊戲時,它不會被歸類爲仍然活動的遊戲。所以不確定爲什麼這些行似乎沒有更新,特別是當我重新加載表時,遊戲列表控制器willAppear()?而且我不緩存遊戲NSFecthController :)
我已經附加了一些圖片顯示控制檯輸出過多的結果。首先是初始加載
不能真正從代碼告訴,但可以把它涉及到通過fetchedResultsController並獲得在viewWillAppear中的最新數據不是一樣像這樣獲得的副本'讓games = fixture.team.game?.allObjects as! [遊戲]' –
@UpholderOfTruth我只是寫一個for循環進FixtureViewCell打印出的價值觀和他們相匹配的fetchedResultsController – Jonnny
什麼這行的值'如果INT(fixture.currentGameTime)> 0 &&!fixture.gameComplete { '?請問fixture.currentGameTime是否仍然大於零並且與fixture.team.game對象中的值不同? –