テーブルビューコントローラでいくつかの記事が読み込まれ、いくつかのAPIから読み込まれ、解析された場合、どのように振る舞うべきかを知りたいと思います。次に、彼の詳細を見るためにいくつかの記事をクリックしたいと思います。セグが完了した後にデータを再度ロードする
起動時にすべてのデータをすべてのデータで読み込み、具体的な全記事を次の詳細テーブルコントローラに渡すか、記事IDを送信して、新しいテーブルコントローラに渡します。
私はこれがはるかに優れた第2の方法だと思いますが、どうやってそれを行うのか分かりません。どんな助け?どうもありがとう。
EDIT:追加コード
MainTableViewController:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let articleId = articles[indexPath.row].Id
let destination = DetailTableViewController()
destination.articleId = articleId
destination.performSegue(withIdentifier: "Main", sender: self)
}
DetailTableViewController:
override func viewDidLoad() {
super.viewDidLoad()
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 140
// Vyzkoušíme jestli jsme připojeni do internetu
if Helper.hasConnectivity() {
// Zapneme načítací obrazovku
setLoadingScreen()
// Načteme jídla
loadMainArticles()
} else {
promptAlert(title: "Upozornění", message: "Ujistěte se, že Vaše zařízení je připojené k internetu")
}
}
private func loadMainArticles() {
ApiService.sharedInstance.fetchArticle(part: "GetArticle", articleId: "brananske-posviceni--spravna-lidova-zabava-s-pecenou-husou") { (articles: [Article]) in
self.removeLoadingScreen()
self.tableView.separatorStyle = .singleLine
if articles.count == 0 {
self.promptAlert(title: "Upozornění", message: "Žádná data")
}
self.selectedArticle = articles[0]
self.tableView.reloadData()
}
}
ApiService:
func fetchArticle(part: String, articleId: String, completion: @escaping ([Article]) ->()) {
var Id = ""
var Title = ""
var Content = ""
var Picture = ""
var PublishDate = ""
let url = NSURL(string: "http://xxx")
URLSession.shared.dataTask(with: url! as URL) { (data, response, error) in
if error != nil {
print(error as Any)
return
}
do {
let json = try! JSONSerialization.jsonObject(with: data!, options: .allowFragments)
var articles = [Article]()
for dictionary in json as! [[String: AnyObject]] {
.
.
.
let article = Article(Id: Id, Title: Title, Content: Content, Picture: Picture, PublishDate: PublishDate, Categories: Categories)
articles.append(article!)
}
DispatchQueue.main.async(execute: {
completion(articles)
})
}
}.resume()
}
問題はそのIであります行をクリックした後にセグを行い、次にloadMainArticlesを実行します。このメソッドはトリガーされますが、URLSession行では常に停止し、直ちにresume()にジャンプし、完了ブロックはトリガーされません。何らかの理由がありますか?
すべての記事を読み込む際に言ったように、私はこれを行っています。 ViewDidLoadでは、APIメソッドGetAllArticles(URLSession.shared.datataskを使用)を呼び出して、常に私が望むものを完了ブロックに戻しますが、Segue経由で記事IDを渡したPageDetailTableViewControllerのsegueの後にこれを実行すると、メソッドは常に最初の行で停止しますURLSession.shared.datatask)、次に.resume()にジャンプします。完了ブロックはトリガーされません。これは私が直面している問題です... –
あなたの質問にいくつかのコードを追加する必要があります。 – lubilis
質問を編集していくつかのコードを追加しました... –