我的应用中有一个搜索功能,可以从 fetchedResultsController 获取数据。问题是当我在 tableView 中显示过滤后的数据时,每次到达新的部分时,数组都会反复开始(由于 indexPath.row 每次都为0 < strong> indexPath.section 递增)。我从来没有擅长嵌套数组,我认为这是学习它们的最佳时机,因为没有这个数组我就无法克服我的问题。
所以我有这个数组,它是 fetchedResultsController 中的过滤数据:
filteredItems = (fetchedResultsController.fetchedObjects?.filter({(budget : Budget) -> Bool in
return (budget.dataDescription?.lowercased().contains(searchText.lowercased()))!
}))!
如何创建一个名为filteredObjects
的数组,用于对部分的项目进行排序?例如
-
答案 0 :(得分:1)
使用以下方法定义部分数量
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return filteredObjects.count
}
并且,对于行数
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return filteredObjects[section].count
}
最后,对于CellForRowAtIndexpath
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TaskTableViewCell
let currentItem = filteredObjects[indexPath.section][indexPath.row]
... Here, use currentItem as whatever it is (Object or dictionary)
return cell
}
答案 1 :(得分:0)
let budgets = [Budget]()
let searchResult = [Budget]()
您应该始终在tableview数据源方法中使用searchResult数组。最初你应该将所有预算数组对象添加到searchResult&amp;加载表视图。
搜索开始时从searchResult中删除所有项目,并将过滤后的结果添加到搜索结果数组&amp;重新加载tableview。
func search(searchText:String){
searchResult.removeAll()
let result = budgets.filter({
var budget = $0
let filtered = budget.expenses.filter({
if let deptName = $0.deptName{
return deptName.lowercased().contains(searchText.lowercased())
}
return false
})
budget.expenses = filtered
return budget.expenses.count != 0
})
searchResult.append(contentsOf: result)
}
struct Budget {
var expenses = [Expense]()
}
struct Expense{
var deptName:String?
}