【问题标题】:Why tableviewcell is returning an optional("")为什么 tableviewcell 返回一个 optional("")
【发布时间】:2019-04-13 16:39:15
【问题描述】:

我正在尝试将来自 api 的请求结果显示到单元格中。我能够发出请求并解析数据。但是当我尝试在单元格中显示内容并打印单元格值时,结果是可选的(“”)。有人能解释一下为什么吗?

cell.restaurantNameLabel.text = apiDataModel.restaurantName

apiDataModel.restaurantName 不是nil

任何帮助表示赞赏!谢谢

override func tableView(_ tableView: UITableView, cellForRowAt  indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! DiscoverTableViewCell

    cell.discoverImage.image = UIImage(named: "Detail")
    cell.restaurantNameLabel.text = apiDataModel.restaurantName


    return cell
}


override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
      let currentCell = tableView.cellForRow(at: indexPath) as! DiscoverTableViewCell
         print(currentCell.restaurantNameLabel.text)


}

func search(url: String, parameters : [String:String]) {
    let headers: HTTPHeaders = ["Authorization":"Bearer \(apiKey)"]
    Alamofire.request(url, method: .get, parameters: parameters, headers: headers ) .responseJSON{
        URLResponse in
        //print(URLResponse)
        if URLResponse.result.isSuccess {
            let yelpDataJSON = JSON(URLResponse.value!)
            self.updateYelpData(Json: yelpDataJSON)
            print("\(yelpDataJSON)")
        }else{
            print("error")
        }

    }
}

func updateYelpData(Json : JSON){

   if  let nameJSON = Json["businesses"][0]["name"].string {

   apiDataModel.restaurantName = nameJSON
    print(apiDataModel.restaurantName)
    apiDataModel.restaurantLocation = Json["businesses"][0]["location"]["display_address"][0].stringValue


    }else{
        print("error")
    }
}

【问题讨论】:

  • 是的。我将它用于诊断目的。我不明白为什么我的标签无法显示结果等...谢谢

标签: ios swift uitableview tableview


【解决方案1】:

你没有向我们展示你在哪里调用了search,但request 是一个异步方法,但你永远不会在updateYelpData 内的表视图上调用reloadData。因此,表格视图的初始填充发生在 Alamofire 检索和解析数据之前。

如果你在updateYelpData里面放一个tableView.reloadData(),表格视图会在被Alamofire检索到后用真实数据更新。

【讨论】:

  • 异步任务对于新手来说总是一个错过的问题
  • 是的,这就是我向 Vangola 指出的原因,因为这是问题的根源。
  • 谢谢。它正在工作。我不知道我必须调用 tableView.reloadData() 。谢谢你 。需要了解异步方法。
【解决方案2】:

似乎apiDataModel.restaurantNamenil / "" 并将其设置为标签文本将使其成为""

之后需要重新加载表格

self.updateYelpData(Json: yelpDataJSON)
self.tableView.reloadData()

并确保你有一个有效的结果

【讨论】:

  • 谢谢。它正在工作。我不知道我必须调用 tableView.reloadData() 。
猜你喜欢
  • 1970-01-01
  • 2018-02-23
  • 2020-06-23
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
  • 2022-11-23
相关资源
最近更新 更多