我有一个包含许多对象的Realm数据库,并且正在尝试实现过滤功能。我也有一个使用Realm结果作为数据源的TableView。当TableView最初加载所有对象时,一切正常,但是随后我过滤结果并尝试重新加载TableView时,出现以下错误:“索引4超出范围(必须小于3)”。
我认为这将是一个简单的解决方法,但是我完全陷入了困境。我确保numberOfRowsInSection函数正在使用我的领域results.count,并且确保过滤功能也能正常工作。当我打印出过滤列表时,它会在调试控制台中显示正确的对象和正确的对象数量。
var schools: Results<School>?
var sortedSchools: Results<School>?
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print(sortedSchools!)
return sortedSchools?.count ?? 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "fullListCell", for: indexPath) as! FullListCell
let schoolIdentifier = sortedSchools?[indexPath.row].identifier
cell.schoolName.text = sortedSchools?[schoolIdentifier!].name
return cell
}
let predicate = NSPredicate(format: "category CONTAINS %@", categoryChosen)
sortedSchools = schools?.filter(predicate)
print(sortedSchools!)
allSchoolsTableView.reloadData()
我目前在sortedSchools结果中有10个对象,当按下按钮时,将使用NSPredicate过滤结果,仅剩下3个学校。在调试控制台中,这3个流派实际上确实被打印了出来,但是当TableView重新加载时,它会得到“索引超出范围”错误。我不明白这一点,因为TableView正在读取的数据源中现在只有3个对象,它甚至从numberOfRowsInSections函数内的print语句中打印3个对象。为什么甚至要寻找索引4的值?我认为这是一个时间问题,也许在表重新加载时还没有更新域结果,但是出于测试目的,我尝试延迟重新加载,这似乎也没有任何改变。 / p>