2017-08-15 20 views
1

私はストーリーボードでテーブルビューを作成しました。 tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]のセルを削除しようとすると、テーブルは削除直後に再ロードされません。それはデータベースでも正常に削除されます。 ビューを閉じて戻ったときに更新されます。どこが間違っていますか?セルを削除した後、即時テーブルビューがリロードされない

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'を使用した後、テーブルビューをリロードしないでください。このメソッドはUIを更新しますBtw delete 'begin-/endUpdates()'両方の行は効果がありませんそして 'dataTask'を** main **スレッドにディスパッチする目的は何ですか?' dataTask'はそれ自身のスレッドを使用します。 – vadian

答えて

0

1)最終的なタスク値からtableview getデータをチェックする必要があります。 2)削除アクションを実行するときは、ここに示すユーザーリロードメソッドを使用して、begin updateとbegin updateメソッドを使用しないでください。

finaltasktableview.reloadData() 

3)なぜここでURLリクエストを定義するのかわかりません。 4)このメソッドのパラメータを使用しない、またはロジックパラメータを削除しないリクエストも含まれません。リクエストの応答を確認して、削除したいデータをもう一度入力してください。

+0

1)はいfinalTask​​tableViewはfinaltaskvalueから値を取得します。3)&4)ここでは、mysqlの行を削除するためにパラメータを送信します(クエリのパラメータは隠してあります)。データベースの削除は成功です。テーブルがリロードしていないという問題のみです。あなたの配列の – swiftuser123

+0

はその値を削除しますか?これをデバッグで確認してください。また、これを試してみてくださいあなたのアウトレットとまた、代理人とデータソースを確認してください。アウトレットを破り、再び参加してみてください。あなたのコードでクラス名を追加してください:UITableviewdelegate、UItableviewDatasource。 –

+0

はいアレイから削除しています。私は店を破って再会しました。それでも同じ – swiftuser123

0

1)finaltasktableview.reloadData()に同意します。 は比較的小さなテーブルの方が優れています。

2)あなたは、ネットワーク呼び出しを発行しますが、最初のDispatchQueue.main.async(実行します。。{

は無用である

関連する問題