UITableView无法从API调用加载数据

时间:2015-12-17 16:49:27

标签: ios swift uitableview

在我的代码中,我有一个搜索栏,当点击其搜索按钮时,它会触发此功能:

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
}

我已经检查过以确保重用标识符是正确的,这样就不会出现问题了。

1 个答案:

答案 0 :(得分:0)

首先需要跟踪代码中的问题所在。我会按照这些步骤来做到这一点。

  1. 确认您的Stocks.getStocks()静态函数正常工作,并且api调用返回有效数据。您尚未提供此代码。

  2. 检查您的数据源,在这种情况下self.listOfStocks是否正在填充API调用中的数据。在getStocks()方法中设置断点或使用print语句。

  3. `

    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")
            }
       }
    
    1. 检查表视图委托,并正确设置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 
      

      }