検索バーの検索文字列でiTunes APIを叩いて,アプリの名前をTable Viewに表示するというものを作っています.
DispatchQueueを使って,通信をサブスレッドで行い,終わったらTableViewを更新しようとしているのですが,上手くいきません.
コードのログで言えば,
RESUME→PARSE→RELOAD
の順で表示して欲しいのですが,
RESUME→RELOAD→PARSE
の順に表示してしまいます.
DispatchQueueにかぎらず,通信処理でメジャーな処理方法を教えて頂けると有難いです!
よろしくお願い致します!
swift
1 func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { 2 //検索バーの文字列からURLを生成 3 let searchWord: String? = searchBar.text?.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed) 4 if let searchWord = searchWord { 5 let urlString :String = "https://itunes.apple.com/search?term="+searchWord+"&country=JP&media=software&entity=software&lang=ja_jp&limit=20" 6 let url:URL! = URL(string:urlString) 7 8 //urlからJSON取得して必要な情報をパース 9 let task = URLSession.shared.dataTask(with: url, completionHandler: {data, response, error in 10 let json = JSON(data: data!) 11 self.resultCount = json["resultCount"].int! 12 print(“PARSE") 13 for i in 0 ..< self.resultCount { 14 self.trackNames[i] = "\(json["results"][i]["trackName"])" 15 } 16 }) 17 // キューを生成してサブスレッドで実行 18 DispatchQueue(label: "jp.AppBox.queue").async { 19 print(“RESUME") 20 task.resume() 21 DispatchQueue.main.async { 22 print(“RELOAD") 23 self.tableView.reloadData() 24 } 25 } 26 } 27 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/10 06:27