首页 > 解决方案 > 删除的单元格出现在 tableView 列表的末尾

问题描述

我有一个请求更新新传入消息的数组(如果存在,则附加一个新实例)

 @objc
    private func loadNewThread() {

        func refreshThreads(newThreads: [ThreadModel]) {

            var oldThreads: [ThreadModel] = self.threads
            var updatedThreads: [ThreadModel] = []

            for new in newThreads {
                updatedThreads.append(new)
                if let index = oldThreads.firstIndex(where: { $0.threadId == new.threadId }) {
                    oldThreads.remove(at: index)
                }
            }

            updatedThreads.append(contentsOf: oldThreads)
            self.threads = updatedThreads

            DispatchQueue.main.async {
                self.updateEmptyState()
                self.tableView.reloadData()
            }
        }

        messageService.getThreads(searchText: searchBar.text?.lowercased(), page: 0) { (result) in
            switch result {

            case .value(let newThreads):
                refreshThreads(newThreads: newThreads)

            case .error(let errors):
                self.handleErrors(errors: errors)
            }
        }
    }

我每 5 秒通过 Timer 在 vi​​ewDidLoad 中更新它

override func viewDidLoad() {
        super.viewDidLoad()

        Timer.scheduledTimer(withTimeInterval: 5.0, repeats: true, block: { [weak self] (timer) in
            guard let self = self else {
                timer.invalidate()
                return
            }
            self.loadNewThread()
        })        
    }

我分别通过元素索引从数组和行中删除元素

if let index = self.threads.firstIndex(where: { $0.threadId == thread.threadId  }) {
                                    let cellIndex = self.threads.firstIndex(where: { $0.threadId == thread.threadId  })

                                    self.threads.remove(at: index)

                                    if let cellIndex = cellIndex {
                                            self.tableView.beginUpdates()
                                            self.tableView.deleteRows(at: [IndexPath.init(row: cellIndex, section: 0)], with: .automatic)
                                            self.tableView.endUpdates()
                                            self.animateLayout()
                                    }

但是删除后,被删除的单元格出现在tableView列表的末尾。我想删除元素的请求在请求追加到数组之后完成我应该如何让我的单元格消失?

标签: swiftuitableviewtimer

解决方案


推荐阅读