我想知道如果我在表視圖控制器中有幾篇文章,它們是從某些API加載和分析的,應該如何表現。然後我想點擊一些文章來查看他的細節。完成segue後再次加載數據
我應該加載上的所有數據啓動所有的文章,然後通過具體的整篇文章接下來詳細信息表控制器或者只發送文章ID,並在新表控制器負載再次全一文與傳入ID?
我認爲這是更好的第二種方法,但不知道該怎麼做。任何幫助?非常感謝。
編輯:添加的代碼
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()
}
的問題是,當我點擊行後再執行segue,然後loadMainArticles。該方法被觸發,但始終在URLSession行上停止,並立即跳轉到resume(),並且永遠不會觸發完成塊。有什麼理由?
我已經完成了這個,就像您在加載所有文章時所說的那樣。在viewDidLoad中我稱之爲API方法GetAllArticles(使用URLSession.shared.datatask),並隨時返回完成塊我想要的東西,但是當我在PageDetailTableViewController賽格瑞,我通過賽格瑞通過文章ID後運行這一點,那麼方法總是在第一行停止( URLSession.shared.datatask),然後跳轉到.resume()因此,沒有完成塊被觸發...這是我面臨的問題... –
您需要在您的問題中添加一些代碼.. – lubilis
我編輯了問題,添加了一些代碼... –