У меня есть UITableViewCell
, в котором есть кнопка и общее количество лайков count.
Когда пользователь нажимает, выполняется вызов API ичисло увеличивается на бэкэнде, и этот конкретный объект устанавливается как liked
.
Если пользователь снова нажимает на него, процесс повторяется, за исключением того, что счетчик уменьшается и флаг liked
не устанавливается.
В настоящее время я обнаруживаю, что когда моя ячейка прокручивается с экрана, счетчик сбрасывается.Это имеет смысл, если мое понимание UITableViewCell
правильное.
Я бы хотел избежать повторного извлечения всего табличного представления при каждом нажатии, поэтому я надеялся, что смогу поддерживать какое-то локальное состояниенепривлекательные предметы.
Я не могу понять, как наилучшим образом сбалансировать логику между способностью управлять реальными счетами и моими локальными счетами.
Чтобы сделать вопросы, возможно, более сложными, существуетвеб-приложение, которое использует те же API-интерфейсы, поэтому мне нужно убедиться, что я очищаю этот локальный кеш каждый раз, когда обновляется UITableView
.
У меня есть static
prop на BaseRecognitionFeedCell
, который выглядит следующим образом:
static var localLikes = [String: Int]()
И метод в моем классе, который вызывается при нажатии значка:
@objc private func handleTapLikeButton() -> Void {
guard let content = content, let externalId = content.externalId else { return }
if BaseRecognitionFeedCell.localLikes[externalId] == nil {
var likes: Int
if !content.liked {
didLikeFeedItem?(content.type, externalId)
likes = content.likes + 1
} else {
// call didDislikeBinding
likes = content.likes - 1
}
BaseRecognitionFeedCell.localLikes[externalId] = likes
likeRecognitionButton.setTitle("\(likes)", for: .normal)
} else {
var likes: Int
if content.likes < BaseRecognitionFeedCell.localLikes[externalId] {
didLikeFeedItem?(content.type, externalId)
likes = BaseRecognitionFeedCell.localLikes[externalId] + 1
} else {
// call didDislikeBinding
likes = BaseRecognitionFeedCell.localLikes[externalId] - 1
}
BaseRecognitionFeedCell.localLikes[externalId] = likes
likeRecognitionButton.setTitle("\(likes)", for: .normal)
}
}
Я уверен, что должен быть способ сделать это, и я просто что-то упускаю.
В настоящее время счет увеличивается, но при прокрутке сбрасывается.Кроме того, при повторном щелчке по нему значение не уменьшается.