【问题标题】:TableViewController with duplicate items of list具有重复列表项的 TableViewController
【发布时间】:2021-07-10 04:55:07
【问题描述】:

我正在使用 swift 4.2 构建 iOS 应用程序,并且我有一个行为奇怪的 TableViewController。

这是代码:

import UIKit

class StoreByCategoryViewController: UITableViewController{
    
    @IBOutlet var storeTableView: UITableView!
    
    var categorySelected:CategoryModel?
    var listaStore = [StoreModel]()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.title = "Elenco Partner"
        
        if((categorySelected) != nil && categorySelected?.id != "0"){
            //posso chiamare il WS estraendo tutti i negozi
            //per categoria
            getStoreByCategory(category : self.categorySelected!);
            storeTableView.reloadData()
        }else{
            getStore();
        }
        storeTableView.delegate = self
        storeTableView.dataSource = self
        
    }

    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return listaStore.count
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return listaStore.count
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = storeTableView.dequeueReusableCell(withIdentifier:"customCell") as! StoreTableViewCell
        let storeModel = listaStore[indexPath.row]
        cell.storeAddress.text = storeModel.address
        cell.storePhone.text = storeModel.phoneNumber
        cell.storeDescription.text = storeModel.description
        if(storeModel.imageUrl != ""){
            print(storeModel.imageUrl)
            let imageUrl:NSURL = NSURL(string: storeModel.imageUrl!)!
            print(storeModel.imageUrl)
            DispatchQueue.global(qos: .userInitiated).async {
                let imageData:NSData = NSData(contentsOf: imageUrl as URL)!
                DispatchQueue.main.async {
                    let image = UIImage(data: imageData as Data)
                    cell.storeImage.image = image
                    cell.storeImage.contentMode = .scaleToFill
                }
            }
        }
       // cell.storeImage.layer.cornerRadius = cell.storeImage.frame.height / 2
        return cell
    }
    
    
    
    
    
    
    
    func getStoreByCategory(category : CategoryModel){
        var params = [
            "cat_id" : category.id
        ]
        let postUrl = APIRequest(endPoint: "get_store_by_category")
        postUrl.sendRequest(parameters: params as! [String : String]) {
            responseObject, error in
            guard let responseObject = responseObject, error == nil else {
                print(error ?? "Unknown error")
                return
            }
            do{
                let messageData = try JSONDecoder().decode(ResponseStoreByCategoryModel.self, from: responseObject)
                var array = messageData.result
                for store in array {
                    var imageUrl = ""
                    if(store.image.count > 0){
                        imageUrl = store.image[0].image
                    }
                    let s = StoreModel(id: "",
                                           description: store.firstName,
                                           imageUrl: imageUrl,
                                           address: store.address,
                                           phoneNumber: store.phone)
                    self.listaStore.append(s)
                }
                 self.storeTableView.reloadData()
            }catch{
                print("errore durante la decodifica dei dati")
            }
        }
    }
    
    func getStore(){
        var params = [
            "" : ""
        ]
        let postUrl = APIRequest(endPoint: "get_store")
        postUrl.sendRequest(parameters: params as! [String : String]) {
            responseObject, error in
            let user = CategoryModel(id: "0",
            description: "Tutti",
            imageUrl: "")
            //self.listaCategorie.append(user)
            guard let responseObject = responseObject, error == nil else {
                print(error ?? "Unknown error")
                return
            }
            do{
                let messageData = try JSONDecoder().decode(ResponseStoreModel.self, from: responseObject)
                var array = messageData.result
                for store in array {
                    var imageUrl = ""
                    if(store.image.count > 0){
                        imageUrl = store.image[0].image
                    }
                    let s = StoreModel(id: "",
                                           description: store.firstName,
                                           imageUrl: imageUrl,
                                           address: store.address,
                                           phoneNumber: store.phone)
                    self.listaStore.append(s)
                }
                self.storeTableView.reloadData()
            }catch{
                print("errore durante la decodifica dei dati")
            }
        }
    }
}

方法getStore,getStoreByCategory,返回9项,但是方法

numberOfSection 和填充 customCell 的方法被调用了 3 次。所以我有一个包含 27 个项目而不是 9 个项目的表。

【问题讨论】:

  • numberOfSections numberOfRowsInSection 中的拼写错误?

标签: ios tableview swift4.2


【解决方案1】:

看起来您只需要 1 个部分,其中包含 9 行。如果是这种情况,您可以从 numberOfSections 实现中返回 1。

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

我注意到的另一件事是 - 您还有一个 UITableViewController 和一个 @IBOutlet var storeTableView: UITableView!。您不需要插座,您可以使用self.tableView

【讨论】:

    【解决方案2】:

    如果您的 tableView 单元格中有多个部分,那么您不能像在这行代码中那样直接获取单元格

    让 storeModel = listaStore[indexPath.row]

    在我看来,你必须先进入该部分,然后再进入这样的单元格数据。

    让 storeModel = listaStore[indexPath.section][indexPath.row]

    如果您使用 TableViewController,也不需要 tableview 的插座

    【讨论】:

      猜你喜欢
      • 2022-11-30
      • 2021-01-06
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-13
      • 1970-01-01
      • 2021-08-22
      相关资源
      最近更新 更多