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

#ios #swift #uitableview #uicollectionview

#iOS #swift #uitableview #uicollectionview

Вопрос:

Я пытаюсь перезагрузить и обновить делегат UITableviewCell on UICollectionViewCell didSelect, я ожидаю UITableviewCell , что он будет обновлен в соответствии со значениями, возвращаемыми UICollectionViewCell выбором. UICollectionViewCell возвращает data , как и ожидалось, однако UITableviewCell не обновляет и не перезагружает данные, а вместо этого продолжает добавлять данные к предыдущему при прокрутке, например, когда я нажимаю «обувь», возвращается обувь, и если я нажимаю «шляпа», шляпа добавляется к данным «обуви» вместо того, чтобы удаляться.отображается как отдельный тип данных.

Я обновляю свой UITableviewCell из UICollectionViewCell didSelect делегата (я нажимаю на api оттуда)

Попадание в Api:

 //MARK: - UICollectionViewDelegate
extension ViewController: UICollectionViewDelegate {
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        // SET CATEGORY PARAMETER VALUES
        let item = self.type[indexPath.row]
        switch item.type {
        case .shoe:
            self.type[getIndex(type: .shoe)].category = "shoe"
            self.type[getIndex(type: .shoe)].subCategory = "men"
            
            self.category = self.type[getIndex(type: .shoe)].category
            self.subCategory = self.type[getIndex(type: .shoe)].subCategory
           
            apiCall(categoryKey: self.category!, subCategoryKey: self.subCategory!)
            print(category!,subCategory!)
        case .hat:
            self.type[getIndex(type: .hat)].category = "hat"
            self.type[getIndex(type: .hat)].subCategory = "men"
            
            self.category = self.type[getIndex(type: .hat)].category
            self.subCategory = self.type[getIndex(type: .hat)].subCategory
            
            apiCall(categoryKey: self.category!, subCategoryKey: self.subCategory!)
            print(category!,subCategory!)
       
        }
    }
}

 
  • ApiCall функция:
     func apiCall(categoryKey: String, subCategoryKey: String) {
        if (page == 0) {
            data = []
            hasMore = false
        }
        guard let token = UserDefaults.standard.string(forKey: "accessToken") else {return}
        
        MyAPI.getData(token: token, limit: limit, skip: skip, category: categoryKey, subCategory: subCategoryKey, completion: { (response) in
            
            self.hasMore = response.hasMore!
            self.page  = 1
            self.skip  = self.limit
            self.data.append(contentsOf: response.items)
            
            if let total = response.totalCount {
                self.totalCount = total
            } else {
                self.totalCount = 0
            }
             DispatchQueue.main.async {
            self.tableView.reloadData()
        }
        })
    }
 

мой TableView не отображает разные данные в разных выбранных ячейках, а скорее добавляет их друг к другу, что я здесь делаю не так?
(кстати, также есть проблемы с нумерацией страниц, каким-то образом данные неправильно разбиваются на разные данные) .. .

Комментарии:

1. @matt, я сделал, я искал его в Google и перепробовал много способов, но все еще не могу заставить его работать. можете ли вы проверить мой код и найти там плохую логику или неприятный запах?

2. @zeytin, да, братан, ты прав на деле.. я очень ценю вашу помощь, причина, по которой я удалил вопрос, заключалась в том, что я понял, что мое содержимое qustion было неправильным, поэтому я обновил вопрос. извините, что.

3. Вы должны добавить более подробную информацию о том, где находятся ваши CollectionView и TableView. Кроме того, добавьте изображение полученного результата, потому что неясно, что не так