如何正确加载依赖的 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 中不同大小的图像的困难
如何仅在 swift 中重新加载 tableViewCell?
如何正确获取 tableViewCell 的 contentView 绑定大小?