довольно плохо знаком со Swift, но я хотел бы сделать презентацию контроллера, и когда я вызываю этот контроллер, я не получаю текст textLabel, добавленный.Когда я впервые запускаю приложение, я правильно понимаю, но затем при попытке добавить новый отзыв это не работает.Вот мой код
override func viewDidLoad() {
super.viewDidLoad()
observeReviews()
navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Sign Out", style: .plain, target: self, action: #selector(handleLogout))
let newReview = UIBarButtonItem(barButtonSystemItem: .compose, target: self, action: #selector(handleNewReview))
let addCategory = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(handleNewCategory))
navigationItem.rightBarButtonItem = addCategory
navigationItem.rightBarButtonItems?.append(newReview)
tableView.register(ReviewCell.self, forCellReuseIdentifier: cellId)
checkIfUserIsLoggedIn()
}
func observeReviews() {
let ref = Database.database().reference().child("reviews").queryOrdered(byChild: "timestamp")
ref.observe(.childAdded, with: { (snapshot) in
if let dictionary = snapshot.value as? [String:AnyObject] {
let review = Review()
review.gameId = dictionary["gameId"] as? String
review.userId = dictionary["userId"] as? String
review.reviewText = dictionary["reviewText"] as? String
review.rate = dictionary["rate"] as? Int
review.timestamp = dictionary["timestamp"] as? Int
self.reviews.append(review)
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
}, withCancel: nil)
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! ReviewCell
let review = reviews[indexPath.row]
cell.review = review
return cell
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 72
}
}
class ReviewCell: UITableViewCell {
var review: Review? {
didSet {
var rate = ""
if let rating = review?.rate {
switch rating {
case 0:
rate = "It's awful"
break
case 1:
rate = "Nothing special"
break
case 2:
rate = "Meh"
break
case 3:
rate = "Maybe I'll play it if I don't have Internet"
break
case 4:
rate = "IT'S AWESOME"
break
default:
rate = "none"
break
}
}
let userId = review?.userId
let refUsers = Database.database().reference().child("users").child(userId!)
refUsers.observeSingleEvent(of: .value, with: { (snapUsers) in
if let dictUsers = snapUsers.value as? [String: AnyObject] {
let user = User()
user.username = dictUsers["username"] as? String
user.email = dictUsers["email"] as? String
user.profilePicture = dictUsers["profileImageUrl"] as? String
self.textLabel?.text = user.username! + " rated "
}
}, withCancel: nil)
let gameId = review!.gameId
let refGames = Database.database().reference().child("games").child(gameId!)
refGames.observeSingleEvent(of: .value, with: { (snapGames) in
if let dictGames = snapGames.value as? [String: AnyObject] {
let game = Game()
game.gid = gameId
game.name = dictGames["name"] as? String
game.desc = dictGames["desc"] as? String
game.coverPhoto = dictGames["gameCover"] as? String
self.textLabel?.text?.append(game.name! + " as " + "\"" + rate + "\"")
if let gameCoverUrl = game.coverPhoto {
self.gameCoverView.loadImageWithCacheFromUrlString(urlString: gameCoverUrl)
}
}
}, withCancel: nil)
self.detailTextLabel?.text = "Tap to see more"
}
}
override func prepareForReuse() {
print(textLabel?.text)
}
override func layoutSubviews() {
super.layoutSubviews()
textLabel?.frame = CGRect(x: 64, y: textLabel!.frame.origin.y - 2, width: textLabel!.frame.width, height: textLabel!.frame.height)
detailTextLabel?.frame = CGRect(x: 64, y: detailTextLabel!.frame.origin.y + 2, width: detailTextLabel!.frame.width, height: detailTextLabel!.frame.height)
}
let gameCoverView: UIImageView = {
let imageView = UIImageView()
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.contentMode = .scaleAspectFill
return imageView
}()
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: .subtitle, reuseIdentifier: reuseIdentifier)
addSubview(gameCoverView)
//x,y,width,height constraints
gameCoverView.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 8).isActive = true
gameCoverView.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
gameCoverView.widthAnchor.constraint(equalToConstant: 48).isActive = true
gameCoverView.heightAnchor.constraint(equalToConstant: 48).isActive = true
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Итак, в viewDidLoad()
я звоню observeReviews()
, который выбирает отзывы из Firebase, а затем, когда я заполняю tableview
, я использую специальный класс дляклетка.Итак, когда я впервые запускаю приложение, я получаю все приятное, но затем, когда я добавляю новый обзор для некоторой игры, с этого контроллера представления я представляю этот контроллер представления, и все, что я получаю, это только первый пример, например:
правильный: Владимир оценил CandyCrushSaga как удивительный
что я получаю: Владимир оценил
![wha i get](https://i.stack.imgur.com/4ouus.png)