在我的代码中,我有一个搜索栏,当点击其搜索按钮时,它会触发此功能:
func getStocks(ticker: String) {
do {
try Stocks.getStocks(ticker, completion: {stockList in
self.listOfStocks = stockList
print("Stock item is: \n", self.listOfStocks.popLast())
dispatch_async(dispatch_get_main_queue(), {
self.saveStocks(self.listOfStocks.popLast()!)
self.tableView.reloadData()
})
})
} catch {
print("Failed to get stocks")
}
}
此功能的目的是通过我的API调用,获取用户在搜索栏中指定的项目的数据,将其附加到全局项目列表,同时还将全局列表中的最新项目保存到核心数据。后来我有一个代码块来设置文本单元格标签并将其设置为我的Stock结构的name属性:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("stockItem", forIndexPath: indexPath)
if let label:UILabel = cell.textLabel {
label.text = self.listOfStocks[indexPath.row].name
}
return cell
}
我已经检查过以确保重用标识符是正确的,这样就不会出现问题了。
答案 0 :(得分:0)
首先需要跟踪代码中的问题所在。我会按照这些步骤来做到这一点。
确认您的Stocks.getStocks()静态函数正常工作,并且api调用返回有效数据。您尚未提供此代码。
检查您的数据源,在这种情况下self.listOfStocks
是否正在填充API调用中的数据。在getStocks()方法中设置断点或使用print语句。
`
func getStocks(ticker: String) {
do {
try Stocks.getStocks(ticker, completion: {stockList in
if let list = stockList {
self.listOfStocks = list
dispatch_async(dispatch_get_main_queue(), {
if let last = self.listOfStocks.popLast() {
self.saveStocks(last)
}
self.tableView.reloadData()
})
} else {
print("ERROR: stockList is nil!")
}
})
} catch {
print("Failed to get stocks")
}
}
检查表视图委托,并正确设置dataSource委托方法。下面是我如何检查我的cellForRowAtIndexPath方法。
覆盖func tableView(tableView:UITableView,cellForRowAtIndexPath indexPath:NSIndexPath) - > UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier(“stockItem”,forIndexPath:indexPath)
if let datasource = self.listOfStocks[indexPath.row] {
textLabel.text = datSource.name
} else {
textLabel.text = "Row \(indexPath.row): NOT set!"
}
return cell
}