隔离完成后再次加载数据

吉里播放器

我想知道如果在表视图控制器中有几篇文章是如何工作的,这些文章是从某些API加载和解析的。然后,我想单击一些文章以查看他的详细信息。

我应该在启动所有数据时加载所有文章,然后将具体的整个文章传递给下一个明细表控制器,还是仅发送文章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时,则应该加载MainArticles。该方法被触发,但始终在URLSession行上停止,并立即跳转到resume(),并且永远不会触发完成块。有什么原因吗?

露比利斯

这是应根据商品数据模型大小进行的选择。

您应注意需要在TableView单个单元上显示哪些数据以及在“文章详细信息”页面上显示哪些数据。

我想你显示:

  • TableView中的标题和发布时间
  • 标题,小时,详细说明,或“详细信息”页面中的某些图像

在这种情况下,我建议您仅下载每个商品的标题和小时,然后在详细信息页面中下载单个商品的详细信息(避免下载未使用的内容,因为用户无法打开每个商品)。

否则,如果数据量相似,则在不发出任何其他网络请求的情况下,在首次连接上下载所有信息并打开详细信息页面。

我认为这是更好的第二种方法,但不知道如何去做。

您需要从TableView选定的单元格中检索商品ID,然后使用prepareForSegue将其传递给DetailPageViewController。在DetailPageViewController ViewDidLoad中,将文章ID发送到您的后端api,并检索要显示的文章详细信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章