JSONを取得した後にtableViewにデータを表示しようとしています。ただし、tableView.reloadData()
を使用すると失敗します。私はメニューの遅延。swift NSURLSession POSTリクエスト後にデータをリロードするタイミングは何ですか?
私の状況では、tableViewはJSONを取得してから14〜20秒後にデータをリロードしますが、ユーザーがテーブルをアクティブにすると直ちにデータをリロードします。
スウィフト:
func getJson(word: String){
let url: NSURL = NSURL(string: "MyPHP.php")!
let session = NSURLSession.sharedSession()
let request:NSMutableURLRequest = NSMutableURLRequest(URL:url)
request.HTTPMethod = "POST"
request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData
let bodydata = "label=\(word)"
request.HTTPBody = bodydata.dataUsingEncoding(NSUTF8StringEncoding)
if bodydata != " " {
let task = session.dataTaskWithRequest(request) {
(data, response, error) -> Void in
let httpResponse = response as! NSHTTPURLResponse
let statusCode = httpResponse.statusCode
if(statusCode == 200) {
self.libraryArray.removeAll()
do{
let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments)
print(json)
if let book = json["Book"] as? [[String: AnyObject]]{
for books in book {
if let BookName = book["Name"] as? [String: AnyObject] {
let name = BookName["name"] as? String
let author = BookName["author"] as? String
let bookDict = [
"name": name,
"id": id,
"author": author]
self.libraryArray.append(bookDict)
self.tableView.reloadData() // has 14- 20 seconds delay, but the JSON has already received
}
}
}
}catch {
print("error:\(error)")
}
}
}
task.resume()
// self.tableView.reloadData() if i try to reload here, it will not be executed.
}
}
@IBAction func Next(sender: AnyObject) {
self.getJson("someString")
//self.tableView.reloadData() if i try to reload here, it will be fail.
}
遅延の問題は何ですか?どのようにそれを解決するには? tableViewをリロードするタイミングは?
であなたの
self.tableView.reloadData()
を交換して申し訳ありませんが、あなたの方法は、すぐにデータを再ロードすることはできません。 –