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 而终止的主要内容,如果未能解决你的问题,请参考以下文章