如何解决当我尝试重新加载日期时,Swift 5 TableView 在 ViewController 中发现 nil
我正在从 API 端点获取数据,并且在第一次获取时 tableview 正在工作。
但是当我更改 API url 时,获取仍然有效,但是对于 tableview,xcode 抛出“致命错误:在隐式解包可选值时意外发现 nil”错误消息。
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
var listofRecipes = [RecipeDetail]()
{
didSet {
dispatchQueue.main.async {
self.tableView.reloadData() --->> Here i get the nil error
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
callApi()
}
func callApi() {
print("------------------- API -------------------")
print(ApiSettings.instance.apiEndpoint)
//self.listofRecipes.removeAll()
let recipeRequest = RecipeRequest(url: ApiSettings.instance.apiEndpoint)
recipeRequest.getData{ result in
switch result {
case .failure(let error):
print(error)
case .success(let recipes):
self.listofRecipes = recipes
}
}
}
func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
return listofRecipes.count
}
func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell",for: indexPath)
let recipe = listofRecipes[indexPath.row]
cell.textLabel?.text = recipe.title
cell.detailTextLabel?.text = recipe.slug
return cell
}
}
我还尝试从故事板上的 tableview 中删除所有连接并再次添加它们,还有委托和数据源,但它仍然无法正常工作。第一次加载工作正常,但在应用程序崩溃之后。
我还检查了 listofRecipes didSet,其中的数组包含来自第二个 API 查询的新值。
有人有什么建议吗?谢谢!
解决方法
在属性观察器中重新加载表视图不是一个好习惯。错误很可能是因为第一次调用观察者时表视图出口尚未连接。
在 API 调用中重新加载它。
var listOfRecipes = [RecipeDetail]()
func callApi() {
print("------------------- API -------------------")
print(ApiSettings.instance.apiEndpoint)
//self.listOfRecipes.removeAll()
let recipeRequest = RecipeRequest(url: ApiSettings.instance.apiEndpoint)
recipeRequest.getData{ result in
switch result {
case .failure(let error):
print(error)
case .success(let recipes):
DispatchQueue.main.async {
self.listOfRecipes = recipes
self.tableView.reloadData()
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。