У меня есть пользовательский UITableViewCell
с 2 header
разделами (один для Moderators
и один для Members
).
Это приложение чата, поэтому после того, как я получаю участников чата из базы данных и их соответствующий статус (то есть член или модератор), я сохраняю их в массиве и заполняю свою ячейку на основе этих данных.
Проблема возникает, когда я хочу обновить contentView.backgroundColor
ячейки, когда текущий вошедший в систему пользователь совпадает с user.id
, который передается в ячейку.
Я точно знаю, что членов (их всех) всего 3, но когда я печатаю userId
и currentUserId
из ячейки, я вижу, что это называется 4 раза, что странно.
class ChatMembers: UIViewController {
var chatMembers = [
[UserModel](),
[UserModel]()
]
var participantsStatus = [String:String]()
var chatId = ""
override func viewDidLoad() {
super.viewDidLoad()
observeMemberStatus()
}
func observeMemberStatus() {
if chatId != "" {
Api.Message.observeChatRoomMemberStatus(forChatId: chatId, completion: { memberAndStatus in
self.participantsStatus = memberAndStatus
for member in memberAndStatus {
if member.value == "moderator" {
Api.Users.observeUsersShort(withId: member.key, completion: { user in
self.chatMembers[0].append(user)
DispatchQueue.main.async {
self.tableView.reloadData()
}
})
}
else {
Api.Users.observeUsersShort(withId: member.key, completion: { user in
self.chatMembers[1].append(user)
DispatchQueue.main.async {
self.tableView.reloadData()
}
})
}
}
})
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ChatParticipantSettingsTVC") as! ChatParticipantSettingsTVC
let user = chatMembers[indexPath.section][indexPath.row]
cell.user = user
cell.delegateChatParticipantsProtocol = self
return cell
}
И сама ячейка:
var user: UserModel? {
didSet {
updateView()
}
}
func updateView() {
guard let currentUserId = Api.Users.CURRENT_USER?.uid else { return }
guard let userId = user?.id else { return }
print("userId: ", userId)
print("currentUserId: ", currentUserId)
//
if userId == currentUserId {
contentView.backgroundColor = UIColor.hex("F0F4F6")
}
}
2 приведенных выше оператора печати выводят следующее:
userId: ZgoQHyzAoPOS3amv
currentUserId:T3kOyOWvl6aZhDY
идентификатор пользователя: FtvyJ7FshZQuGpLR08
currentUserId: T3kOyOWvl6aZhDY
идентификатор пользователя: ZgoQHyzAoPOS3amv
currentUserId: T3kOyOWvl6aZhDY
идентификатор пользователя: T3kOyOWvl6aZhDY
currentUserId: T3kOyOWvl6aZhDY
Это в основном печатаетпользователь во второй раз, и я не знаю почему.(случайный пользователь, иногда это текущий пользователь, который влияет на цвет ячейки, а иногда другой пользователь, поскольку массив не сортируется)