Как очистить данные tableView и reloadData каждый раз, когда представление загружается снова - PullRequest
0 голосов
/ 11 июля 2019

Я извлекаю данные из базы данных Firebase в реальном времени в мой tableView, и ячейки по щелчку открывают новое представление с данными из tableView из firebase, но мне нужно tableView для прослушивания изменений в данных Firebase, поэтому я сделал слушатель, но каждый раз, когда я закрываю и снова открываю контроллер представления, tableView не перезагружает Data (), он просто добавляет новые данные в массив в tableView, не удаляя старые данные массива, это делает список двойным каждый раз, когда я закрываю и снова открываю представлениеконтроллер

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

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.dataSource = self
    tableView.delegate = self

    dataService()

    searchController.searchResultsUpdater = self
    searchController.obscuresBackgroundDuringPresentation = false
    searchController.searchBar.placeholder = "Search NightClubs"

    navigationItem.searchController = searchController
    definesPresentationContext = true

    searchController.searchBar.scopeButtonTitles = ["All", "Barrie", "Toronto", "London"]
    searchController.searchBar.delegate = self
    tableView.tableFooterView = searchFooter
}

override func viewWillAppear(_ animated: Bool) {
    if let selectionIndexPath = self.tableView.indexPathForSelectedRow {
        self.tableView.deselectRow(at: selectionIndexPath, animated: animated)
}
super.viewWillAppear(animated)
}

func dataService() {
    DataService.ds.REF_BARS.observe(.value, with: { (snapshot) in
        print(snapshot.value as Any)
        if let snapshot = snapshot.children.allObjects as? [DataSnapshot] {
            for snap in snapshot {
                print(snap)
                if let barData = snap.value as? Dictionary<String, AnyObject> {
                    let bar = NightClubs(barData: barData)
                    self.nightClubs.append(bar)
                    print(self.nightClubs)
                    self.tableView.reloadData()
                }
                self.tableView.reloadData()
            }
            self.tableView.reloadData()
            self.smallerNightClubs = self.nightClubs//.filter { $0.promoted == "Yes"}
        }
        self.tableView.reloadData()
    })
}

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if isFiltering() {
        searchFooter.setIsFilteringToShow(filteredItemCount: filteredNightClubs.count, of: smallerNightClubs.count) 
        return filteredNightClubs.count
    }
    searchFooter.setNotFiltering()
    return nightClubs.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "searchCell") as! searchCell
    let nightClub: NightClubs
    if isFiltering() {
        nightClub = filteredNightClubs[indexPath.row]
    } else {
        nightClub = nightClubs[indexPath.row]
    }
    cell.locationTextLabel.text = nightClub.location
    cell.nameTextLabel.text = nightClub.name
    return cell
}

1 Ответ

1 голос
/ 11 июля 2019

Вам нужно очистить массив перед следующим добавлением, как

self.nightClubs.removeAll()
if let snapshot = snapshot.children.allObjects as? [DataSnapshot] {
   for snap in snapshot {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...