Swift 5 TableView 在我尝试重新加载日期时在 ViewController 中发现 nil
Swift 5 TableView found nil inside ViewController when i try to reloaddate
我正在从 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
}
}
我还尝试从故事板上的表视图中删除所有连接,然后再次添加它们,还有委托和数据源,但它仍然无法正常工作。第一次加载完美,但在应用程序崩溃后。
我还检查了 listOfRecipes didSet,其中的数组包含来自第二个 API 查询的新值。
有人有什么建议吗?谢谢!
在 属性 观察者中重新加载 table 视图不是一个好习惯。发生错误的原因很可能是 table 视图出口在第一次调用观察者时尚未连接。
在 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()
}
}
}
}
我正在从 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
}
}
我还尝试从故事板上的表视图中删除所有连接,然后再次添加它们,还有委托和数据源,但它仍然无法正常工作。第一次加载完美,但在应用程序崩溃后。
我还检查了 listOfRecipes didSet,其中的数组包含来自第二个 API 查询的新值。
有人有什么建议吗?谢谢!
在 属性 观察者中重新加载 table 视图不是一个好习惯。发生错误的原因很可能是 table 视图出口在第一次调用观察者时尚未连接。
在 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()
}
}
}
}