【发布时间】:2019-04-12 11:14:54
【问题描述】:
我有一个 tableView,它的数据源是一个计算数组 allItems:
var pendingItems: [Item] = []
var loadingItems: [Item] = []
var processedItems: [Item] = []
var allItems: [Item] {
return processedItems + loadingItems + pendingItems
}
有时,在运行应用程序时,我会收到以下错误: 线程 1:致命错误:newElements.underestimatedCount 被高估了。
当我尝试通过此函数中的索引到达元素时,似乎会发生这种情况:
func getCellContent(at index: Int) -> (url: String, status: String) {
return (url: queue.allItems[index].url, status: queue.allItems[index].status.description)
}
这是截图:https://www.dropbox.com/s/b9miuyiz1em56mk/Screen%20Shot%202019-04-12%20at%202.06.25%20PM.png?dl=1
有人能解释为什么会这样吗?非常感谢任何帮助!
数据源方法(来自视图控制器):
extension WebSearchViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return presenter.getNumberOfRows()
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "WebPageTableViewCell", for: indexPath) as! WebPageTableViewCell
let (url, status) = presenter.getCellContent(at: indexPath.row)
cell.addressLabel.text = url
cell.statusLabel.text = status
return cell
}
}
主持人的帮助方法:
func getNumberOfRows() -> Int {
return queue.allItems.count
}
func getCellContent(at index: Int) -> (url: String, status: String) {
return (url: queue.allItems[index].url, status: queue.allItems[index].status.description)
}
这是我的Item:
class WebPage: NSObject {
var url: String
var status: URLStatus
init(url: String, status: URLStatus = .unchecked) {
self.url = url
self.status = status
}
func changeStatus(to newStatus: URLStatus) {
self.status = newStatus
}
static func == (lhs: WebPage, rhs: WebPage) -> Bool {
return lhs.url == rhs.url
}
}
【问题讨论】:
-
每次调用 allItems 时,都会通过组合 3 个数组来创建一个新数组,至少在 getCellContent 中使用局部变量不是更好吗?
let all = allItems -
添加 celforrow 和 numberofrows 代表代码
-
@dahiya_boy,我添加了数据源方法
-
@JoakimDanielson,我决定创建一个计算变量,因为它总是在变化。我从 pendingItems 中删除元素,将它们添加到 loadingItems 中,然后添加到 processedItems 中(一旦它们改变了它们的状态)。这就是为什么 allItems 数组总是不同的原因。我认为每当我需要一个特定的项目时,迭代一个巨大的数组是没有效率的。有没有更好的方法来组织不同状态的元素?
-
@AlinaVas 你能显示
Item模特吗?
标签: ios swift uitableview fatal-error