删除单元格后,swift tableview无法重新加载

问题描述:

我在故事板中创建了Tableview。当我尝试删除tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]中的单元格时,表格不会在删除后立即重新加载。它也会在数据库中成功删除。 当我关闭视图并回来时,它将被更新。我哪里错了?删除单元格后,swift tableview无法重新加载

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? { 


    let deleteAction = UITableViewRowAction(style: .normal, title: "Löschen") { (rowAction, indexPath) in 


      let Info: NSDictionary = self.finaltaskValue[indexPath.item] as! NSDictionary 
      let pwid = Info["pwid"] as! String 
      self.finaltaskValue.remove(at: indexPath.row) 
      self.finalTasktableView.beginUpdates() 
      self.finalTasktableView.deleteRows(at: [indexPath], with: .none) 
      self.finalTasktableView.endUpdates() 


      let url = URL(string: "...php") 

      var request = URLRequest(url: url!) 
      request.httpMethod = "POST" 
      let body = "parameters" 

      request.httpBody = body.data(using: .utf8) 

      URLSession.shared.dataTask(with: request) { data, response, error in 

       if error == nil { 

        DispatchQueue.main.async(execute: { 

         do{ 
          let json = try JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary 


          guard let parseJSON = json else { 
           print("") 
           return 
          } 

          DispatchQueue.main.async(execute: { 
          self.finalTasktableView.reloadData() 
          }) 

         }catch { 
          //print("Caught an error: \(error)") 
          DispatchQueue.main.async(execute: { 
           let message = "Server ist Offline! Wir arbeiten mit hochdruck dran alles zu reparieren" 

         } 
        }) 

       }else { 

        DispatchQueue.main.async(execute: { 
         let message = error!.localizedDescription 


       } 

       }.resume() 
     } 


    deleteAction.backgroundColor = colorDarkGreen 
    return [deleteAction] 
} 
+0

使用'deleteRows后不要重新加载表视图(at'此。方法不会更新用户界面,Btw删除'begin-/endUpdates()',两行都没有效果,派遣'dataTask'到** main **线程的目的是什么?'dataTask'无论如何都使用自己的线程 – vadian

1)你必须检查你的tableview从最终任务值中获取数据。 2)请在执行删除操作的时候请不要使用开始更新,并且开始结束更新方法请用这里显示的用户重新装入方法。

finaltasktableview.reloadData() 

3)我不明白你为什么在这里定义url请求? 4)您的请求不使用此方法的任何参数或删除逻辑参数也不包括在内。检查你的请求响应再次填写你想要删除的数据。

+0

1)是finalTask​​tableView从finaltaskvalue获取值3)&4)我在这里发送参数来删除mysql中的行(我在Query中隐藏了参数)。在数据库中删除成功。唯一的问题是表不重装。你的数组中的 – swiftuser123

+0

删除那个值?通过调试来检查。也请尝试这一个,请检查您的网点,并且还委托和数据源。并试图打破网点并重新加入他们。并在你的代码中添加类名:UITableviewdelegate,UItableviewDatasource。 –

+0

是从数组中删除。我确实打破了网点并重新加入。仍然是一样的 – swiftuser123

1)我同意finaltasktableview.reloadData() 是比较小的表更好。

2)你发出一个网络电话,但第一DispatchQueue.main.async(执行:{

是没用的