TableView 多个单元格不起作用,由于信号 9 而终止

Posted

技术标签:

【中文标题】TableView 多个单元格不起作用,由于信号 9 而终止【英文标题】:TableView multiple cell doesnt work, Terminated due to signal 9 【发布时间】:2018-12-03 13:10:37 【问题描述】:

我想当tabbaritem点击调用api并填充tableView时。但就我而言,我必须使用多个单元格。

 up category (tab bar item)  -> category (1- cell) -> products (2- cell)
 up category (tab bar item)-> products (2- cell)

我在 tableView 中有两个原型单元格。显示类别的第一个单元格。展示产品的第二个单元格。 单击类别时,我重新加载了 tableview,然后我可以显示产品。 但是当我只展示产品 1 次时。我的桌面视图不可用。我确定我会调用重新加载数据。 来自调试器的消息:由于信号 9 而终止 这是我的代码,

 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int

    if let orderType = selectedOrderType
    
        switch orderType
        
            case OrderViewHelper.OrderType.Category:
                  return self.categories.count;
            case OrderViewHelper.OrderType.Menu:
                  return self.menus.count;
            case OrderViewHelper.OrderType.Product:
                  return self.products.count;
        
    
    return 0;


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

    var returnerCell = UITableViewCell();
    switch selectedOrderType!
    
        case OrderViewHelper.OrderType.Category:
                let cell = tableView.dequeueReusableCell(withIdentifier: ViewCellStatics.TABLE_ORDER_VIEW_CELL, for: indexPath) as! CategoryTableViewCell;
                cell.lblCategoryId.text = self.categories[indexPath.row].Id;
                cell.lblCategoryName.text = self.categories[indexPath.row].Name;
                cell.lblCategoryId.isHidden = true;
                returnerCell = cell;
                break;
        case OrderViewHelper.OrderType.Menu:
            let cell = tableView.dequeueReusableCell(withIdentifier: ViewCellStatics.TABLE_PRODUCT_VIEW_CELL, for: indexPath) as! ProductsTableViewCell;
            cell.lblPrice.text = self.menus[indexPath.row].Price;
            cell.lblProductName.text = self.menus[indexPath.row].Name;
            cell.lblId.text = self.menus[indexPath.row].Id;
            cell.lblId.isHidden = true;
            cell.lblProductName.numberOfLines = 2;
            returnerCell = cell;
            break;
        case OrderViewHelper.OrderType.Product:
            let cell = tableView.dequeueReusableCell(withIdentifier: ViewCellStatics.TABLE_PRODUCT_VIEW_CELL, for: indexPath) as! ProductsTableViewCell;
            cell.lblPrice.text = self.products[indexPath.row].Price;
            cell.lblProductName.text = self.products[indexPath.row].Name;
            cell.lblId.text = self.products[indexPath.row].Id;
            cell.lblId.isHidden = true;
            cell.lblProductName.numberOfLines = 2;
            cell.addButton.Model = self.products[indexPath.row];
            cell.addButton.addTarget(self, action: #selector(addBasket(_:)), for: .touchUpInside);
            break;
    
    return returnerCell;




private func getCategories(upperCategoryId : String)
    
        var paramaters = [WebServiceParamater]();
        paramaters.append(WebServiceParamater(key: WebServiceVariableKeys.UPPER_CATEGORY, value: upperCategoryId));
        WebService().GetData(action: ActionNames.CATEGORIES, paramater: paramaters)
        
            (objects) in
            if (objects == nil || objects?.count == 0)  return; 
            self.ClearModels(type: OrderViewHelper.OrderType.Category);
            DispatchQueue.main.sync
            
                self.categories = JsonParser.ParseCategories(jsonArray: objects);
                self.tableOrders.reloadData();
            
        
    

    private func getProducts(category : CategoryModel)
    
        var paramaters = [WebServiceParamater]();
        paramaters.append(WebServiceParamater(key: WebServiceVariableKeys.CATEGORY, value: category.Id));
        WebService().GetData(action: ActionNames.PRODUCT, paramater: paramaters)
        
            (objects) in
            if (objects == nil || objects?.count == 0)  return; 
            self.ClearModels(type: OrderViewHelper.OrderType.Product);
            DispatchQueue.main.sync
            
                self.products = JsonParser.ParseProduct(jsonArray: objects);
                self.tableOrders.reloadData();
            
        
    

截图

类别

我点击了一个类别,以便查看产品

重新加载数据不起作用。

【问题讨论】:

显示numberOfRowsInSection委托方法 【参考方案1】:

从不调用DispatchQueue.main.sync,尝试DispatchQueue.main.async

顺便说一句:确保您在 WebService 中的方法在后台线程中异步调用,这样您就不会在加载某些内容时阻塞 UI。

希望这个答案能帮助你理解https://***.com/a/44324968/4304998

【讨论】:

以上是关于TableView 多个单元格不起作用,由于信号 9 而终止的主要内容,如果未能解决你的问题,请参考以下文章

通过引导表单击单元格不起作用

自我调整大小的表格视图单元格不起作用

在 Vue.js 中添加单元格不起作用

使用 PHPExcel 创建 pdf 时合并单元格不起作用

具有多个标签的自我调整大小的单元格不显示多行标签

用 jquery 选择 :visible 表格单元格不起作用?