Tôi có một ứng dụng nhỏ theo dõi người chơi chơi thời gian trong trò chơi thể thao. Tôi có một danh sách các trò chơi thể thao và bạn có thể nhấp vào một trò chơi và bắt đầu theo dõi chi tiết trò chơi. Tôi đang cố gắng thực hiện để trò chơi đang diễn ra và người dùng quay lại danh sách trò chơi, họ không thể nhấp vào một ô trò chơi khác vì nó ghi đè tất cả dữ liệu hiện tại trong trò chơi đang hoạt động.TableViewCell không tải lại như mong đợi
Tôi gần như đã thực hiện công việc này. Khi một trò chơi đang diễn ra và tôi quay trở lại danh sách các trò chơi thể thao, chỉ người chơi đang hoạt động mới có thể truy cập và hiển thị cho người dùng biết rằng trò chơi đó đang hoạt động. Nhưng khi tôi quay trở lại và thiết lập lại trò chơi đó, tôi mong đợi tableView của trò chơi thể thao cho tất cả có thể truy cập được. Nhưng họ thì không. Nó vẫn cho thấy chỉ có một trò chơi hoạt động và tất cả các trò chơi khác là không thể tiếp cận. Tôi đang sử dụng tableView.reloadData trong viewWillAppear. Tôi cũng đã hiển thị mã có liên quan bên dưới.
// 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
}
}
Bây giờ, điều này có hiệu quả khi tôi có trò chơi. Tôi quay trở lại danh sách trò chơi và trò chơi đang hoạt động có thể truy cập và hiển thị nhãn nhỏ và tất cả các ô trò chơi khác không hoạt động. Nhưng nếu tôi quay trở lại và thiết lập lại trò chơi, vì vậy nó không còn hoạt động, tất cả các trò chơi sẽ được hiển thị và có thể truy cập được. Nhưng trò chơi hoạt động vẫn được hiển thị là hoạt động và tất cả các ô trò chơi khác đều không thể truy cập được.
Tôi đã xác nhận rằng khi tôi đã đặt lại trò chơi mà nó không được phân loại là vẫn hoạt động bằng cách in ra một tin nhắn trong lời gọi isAnyGamesInProgress() trong configureFixtureCell(). Vì vậy, không chắc chắn lý do tại sao các hàng dường như không cập nhật, đặc biệt là khi tôi tải lại bảng khi bộ điều khiển danh sách trò chơi willAppear() ?? và tôi không lưu lại kết quả của trò chơi NSFecthController :)
Tôi đã đính kèm một số hình ảnh để hiển thị đầu ra của bàn điều khiển. Đầu tiên là tải ban đầu
có thể không thực sự nói từ mã nhưng nó có thể liên quan để nhận được dữ liệu mới nhất trong viewWillAppear qua fetchedResultsController và đó không phải là giống như bản sao thu được như thế này ' let games = fixture.team.game?.allObjects như! [Game] ' –
@UpholderOfTruth Tôi vừa viết một vòng lặp for vào FixtureViewCell để in ra các giá trị và chúng khớp với các giá trị của fetchedResultsController – Jonnny
Còn dòng này' if Int (fixture.currentGameTime)> 0 &&! Fixture.gameComplete { '? Có thể nào fixture.currentGameTime vẫn ở trên 0 và khác với điều đó trong đối tượng fixture.team.game? –