gpt4 book ai didi

ios - [__NSArray0 objectAtIndex :]: index 0 beyond bounds for empty NSArray

转载 作者:行者123 更新时间:2023-11-28 15:14:50 24 4
gpt4 key购买 nike

我正在从 API 获取 JSON 数据并将其显示在 tableView 中。当用户滚动到最后一行时,下一页将添加到当前数据中。但是添加下一页数据时出现此错误。

[__NSArray0 objectAtIndex:]:索引 0 超出空 NSArray 的范围

    func loadUser(_ currentPage:Int=1){
APIService.loadUser(currentPage, size: 100, callback: { data in
if let data = data["user"].arrayValue as [JSON]?{
self.jsonData?.append(contentsOf: data
self.tableView.reloadData()
self.hideLoadingInView(view: self.view)
}
})
}


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.jsonData?.count ?? 0
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "UserCell") as! UserTableViewCell
cell.user = self.jsonData?[indexPath.row]
if !isLoading && (indexPath.row == self.jsonData!.count - 1){
currentPage += 1
loadUser(currentPage)
}
return cell
}

最佳答案

我会建议一些潜在的修复:

  1. 将异常断点添加到您的项目中,这样您就可以更好地调试您的特定问题。这是非常有用的提示:https://www.natashatherobot.com/xcode-debugging-trick/您可能会发现这有什么问题。
  2. 将 API 调用响应中的 UI 操作移到 DispatchQueue.main.async { ... } block 中,以确保在主线程上操作 UI。否则它可能会导致奇怪的行为,也可能会导致您的问题。
  3. 如果需要从 API 获取另一个页面,请将检查移动到 tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) 函数。有些人确实建议在 UIScrollViewscrollViewDidScroll 委托(delegate)方法中执行此操作。

然后它看起来像这样。

func loadUser(_ currentPage:Int=1){
APIService.loadUser(currentPage, size: 100, callback: { data in
if let data = data["user"].arrayValue as [JSON]?{
DispatchQueue.main.async {
self.jsonData?.append(contentsOf: data)
self.tableView.reloadData()
self.hideLoadingInView(view: self.view)
}
}
})
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.jsonData?.count ?? 0
}

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if !isLoading && (indexPath.row == self.jsonData!.count - 1){
currentPage += 1
loadUser(currentPage)
}
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "UserCell") as! UserTableViewCell
cell.user = self.jsonData?[indexPath.row]

return cell
}

关于ios - [__NSArray0 objectAtIndex :]: index 0 beyond bounds for empty NSArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47022173/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com