如何正确加载依赖的 tableViewCell API 数据?

Posted

技术标签:

【中文标题】如何正确加载依赖的 tableViewCell API 数据?【英文标题】:How to load dependant tableViewCell API data properly? 【发布时间】:2015-04-09 13:13:18 【问题描述】:

一段时间以来,我一直在研究 UITableView,它为每个单元格进行 2 次 API 调用。它工作正常。但是今天我遇到了一个大问题。第一次,屏幕上的单元格比加载的单元格多。

所以当我向下滚动 tableView 时,屏幕冻结了几秒钟,因为它没有加载最后一个单元格。

我一直在尝试正确加载此数据的问题。我对每个单元格的第二个 API 调用是否取决于第一个。

这是目前的设置方式:

我的tableView:

// #tableView
    tableView.setTranslatesAutoresizingMaskIntoConstraints(false)
    tableView.backgroundColor = UIColor.formulaWhiteColor()
    tableView.frame         =   CGRectMake(0, 0, 0, 0)
    tableView.delegate      =   self
    tableView.dataSource    =   self
    self.tableView.tableFooterView = UIView(frame: CGRectZero)
    self.tableView.separatorColor = UIColor.clearColor()
    tableView.registerClass(mySuggestionsCell.self, forCellReuseIdentifier: "com.Formula.mySuggestionsCell")
    tableView.addSubview(refreshControl)
    self.view.addSubview(tableView)

当我的视图出现时,我运行这个函数:

func loadSuggestions() 
    DNService.suggestionsForSection()  (JSON) -> () in
        self.suggestions = JSON["actionable"]
        self.tableView.reloadData()
        self.refreshControl.endRefreshing()
    

(我的 DNSService 是一个使用 Alomafire 的结构)

struct DNService 

static func suggestionsForSection(response: (JSON) -> ()) 
    let urlString = suggestionsURL
    Alamofire.request(.GET, urlString).responseJSON  (_, _, data, _) -> Void in
        let suggestions = JSON(data ?? [])
        response(suggestions)
    


从那里我开始设置单元格:

行数:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return suggestions.count

以及实际配置:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCellWithIdentifier("com.Formula.mySuggestionsCell", forIndexPath: indexPath) as! mySuggestionsCell
    let suggestion = suggestions[indexPath.row]
    cell.configureWithSuggestion(suggestion)
    cell.selectionStyle = UITableViewCellSelectionStyle.None
    return cell

其余的目前正在我的 UITableViewCell 中进行,我很确定这是我在做这件事时完全错误的地方。

func configureWithSuggestion(suggestion: JSON) 
    tickerString = suggestion["ticker"].string!
    tickerLabel.text = tickerString

    // I'm setting up other things like above, but cut them out as they aren't relevant.

    var quoteAPI = NSURL(string: "http://dev.markitondemand.com/Api/v2/Quote/json?symbol=\(tickerString)")
    // This is the API that depends on data from the first API.
    // This is being called for every cell that's being configured...

    var request = NSURLRequest(URL: quoteAPI!)
    var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: nil)
    if data != nil 
        var quote = JSON(data: data!)
        lastPrice = quote["LastPrice"]
        // Again calling more data than just this.
    
    lastPriceLabel.text = lastPrice
    // I'm also setting up and animating some charts here.

当其中一个调用依赖于第一个调用时,如何最好地检索和设置此 API 数据?

【问题讨论】:

【参考方案1】:

我最终为数据创建了一个 coreData 实体。

然后,当视图加载时,我调用第一个 api,循环遍历它,将其保存到 coreData,在循环中我也可以使用变量调用第二个 api。

然后当我从 coreData 加载我的单元格而不是在向下滚动时进行 api 调用时,加载时间没有问题。

【讨论】:

以上是关于如何正确加载依赖的 tableViewCell API 数据?的主要内容,如果未能解决你的问题,请参考以下文章

Swift - TableViewCell 中不同大小的图像的困难

自定义 tableViewCell 滚动时显示不正确

如何仅在 swift 中重新加载 tableViewCell?

如何正确获取 tableViewCell 的 contentView 绑定大小?

如何更改视图控制器中的标签 我要加载一个 tableviewcell 被选中? [复制]

CollectionView 在 tableViewCell 数据显示