Представление таблицы Rx не перезагружается после обновления источника данных

У меня есть табличное представление, которое я пытаюсь сделать реактивным. У меня это работает с использованием Swift.

Ниже приведен код RxSwift

viewModel.getDetailMessages().asObservable().bind(to: messageTableView.rx.items){ tableView, row, element in
            let indexPath = IndexPath(row: row, section: 0)
            print("The size is", InboxData.sharedInstance.inboxdata[messageIndexPath.row].messageDetail.count)
            print("The size is element", element)
            if !element.isSender{
                let cell = tableView.dequeueReusableCell(withIdentifier: "recieverCell", for: indexPath) as! RecieverMessageTableViewCell
                cell.message.text = element.messageText
                cell.message.preferredMaxLayoutWidth = 287
                cell.message.layer.cornerRadius = 8
                cell.message.layer.masksToBounds = true
                return cell
            }else{
                let cell = tableView.dequeueReusableCell(withIdentifier: "senderCell", for: indexPath) as! SenderMessageTableViewCell
                cell.senderMessage.text = element.messageText
                cell.senderMessage.layer.cornerRadius = 8
                cell.senderMessage.preferredMaxLayoutWidth = 287
                cell.senderMessage.layer.masksToBounds = true
                return cell
            }
        }

Ниже моя модель взгляда

class MessagwViewModel{

    func getDetailMessages() -> Observable<[Message]> {
        return Observable.just(InboxData.sharedInstance.inboxdata[messageIndexPath.row].messageDetail)
    }

}

И это класс данных сообщения

class MessageData {

    static let sharedInstance = MessageData()

    var message1 = Message(profilePicture: "Taylor Ward", artistName: "Taylor Ward", messageText: "Hi How are you?", isSender: true)

    var messages = [Message]()

    private init() {
        loadMessages()
    }

    func loadMessages() {
        messages.removeAll()
        messages.append(message1)

    }

}

При нажатии кнопки я пытаюсь добавить данные в массив сообщений следующим образом

sendButton.rx.tap.bind{ value in
            InboxData.sharedInstance.inboxdata[messageIndexPath.row].messageDetail.append(Message(profilePicture: "", artistName: "", messageText: self.messageTextView.text, isSender: true))

       self.messageTableView.reloadData()
            self.messageTableView?.scrollToBottom()
            print("Button clicked")
        }

Количество массивов увеличивается каждый раз, когда я добавляю новый элемент. Но табличное представление не перезагружается, хотя источник данных имеет последнее значение

Кто-нибудь может указать, в чем проблема? Спасибо.

1 ответ

Ваша проблема в MessagwViewModel, Observable.just только выводит один элемент, а затем завершает. Он не контролирует объект на предмет изменений. Это самое простое решение (т.е. взломать), чтобы сделать messageDetail Variable, Вы не показываете, как определяется эта переменная, но исходя из того, как она вызывается, я предполагаю, что она в настоящее время выглядит так: var messageDetail: [Message], Измените это на let messageDetail: Variable<[Message]>, Присвойте ему, используя messageDetail.value = ... и читать из него через его наблюдаемый messageDetail.asObservable()

Другие вопросы по тегам