UPDATE更新しない:私はそれがUITableView
を更新する前に10秒かかった理由を発見したは、どのように私は、プログラムのUITableViewから行を削除し、UI
を。それは私のサーバーに送信しているHTTP POST要求と関係があります。以下は私のコードです。すべての答えを読んだり、オンラインで検索したりしています。理由は、変数index
,indexPath
とself.tableView(tableView: UITableView UITableView, commit: UITableViewCellEditingStyle, forRowAt: IndexPath)
の呼び出しの配置です。
task
クロージャの外側に移動するとすぐに実行されますが、削除する前にサーバーから「OK」が必要なため、外部には移動したくありません。
私は応答がすぐに得られるので、問題はサーバーの応答時間ではありません。私はそれがtask.resume()
と関係があると思うが、それは私が本当に慣れていない。
foreach expense in expenses {
var request = URLRequest(url: URL(string: Constants.ZEBON_SERVER_URL)!)
request.httpMethod = "POST"
let postString = "date=\(expense.date)&amount=\(expense.amount)¬e=\(expense.desc)"
request.httpBody = postString.data(using: .utf8)
let task = URLSession.shared.dataTask(with: request) {
(data: Data?, response: URLResponse?, error: Error?) in
if error != nil {
print("error = \(error)")
}
// If the server responds with "OK" (the request was received) then delete the expense
if responseString?.range(of:"return\":\"ok") != nil {
let index = self.expenses.index(of: expense)
let indexPath = IndexPath(row: index!, section: 0)
// Deletes the expense
self.tableView(self.tableView, commit: .delete, forRowAt: indexPath)
}
else {
// TODO: Implement error handling.
}
}
task.resume()
}
元の質問:
私はUITableView
に表示されているいくつかのオブジェクトを持っています。私はボタンを押すと、それらはサーバーに送られ、tableViewから削除する必要があります。
私の現在のコードは次のようになります。
let index = self.expenses.index(of: expense)
let indexPath = NSIndexPath(row: index!, section: 0)
self.expenses.remove(at: indexPath.row)
// Saves the array 'Expenses' to persistent storage.
self.saveExpenses()
self.tableView.beginUpdates()
self.tableView.deleteRows(at: [indexPath as IndexPath], with: .none)
self.tableView.endUpdates()
私の問題は費用がサーバに送信され、ストレージから削除されていることですが、UITableView
は更新されませんので、私は対話できない一方、セルが表示されたままそれをどうにかして。
メインスレッドでこれを実行していますか? – JackRobinson
tableview.ReloadData()を使用した後でも? –
コードに 'self.tableView.reloadData()'を追加する必要があります。 –