使用新数据搜索和重新加载 TableView 记录
Posted
技术标签:
【中文标题】使用新数据搜索和重新加载 TableView 记录【英文标题】:Search and Reload TableView Records with new data 【发布时间】:2016-10-29 07:22:01 【问题描述】:我正在使用 Xcode 8 和 swift 3 开发 ios 应用程序。我的应用程序具有 tableView 中显示的项目列表我想按日期“使用 datePicker”搜索特定项目。这些项目存储在核心数据库中。
这是我的代码。它搜索得很好,但我无法显示搜索数据。
@IBAction func searchButton(_ sender: AnyObject)
if(dateText.text != nil)
let request = NSFetchRequest <NSFetchRequestResult> (entityName : "Expense_Table")
request.returnsObjectsAsFaults = false
request.predicate = NSPredicate(format: "expenseDate = %@", dateText.text!)
do
let cell = self.tableView.dequeueReusableCell(withIdentifier: "cell") as! customeCell
let result = try self.context.fetch(request)
if (result.count > 0)
for results in result as! [NSManagedObject]
first = results.value(forKey : "exoenseName") as! String
last = results.value(forKey : "expenseAmount") as! Double
second = results.value(forKey: "expenseDate") as! String
//print the data in the Output section of Xcode
print (second)
print (String (last))
print (first)
// save data in the cell of the tableView
cell.dateText.text = second
cell.amounttext.text = String (last)
cell.nameText.text = first
tableView.addSubview(cell)// this method print result over the table view data
tableView.reloadData()
catch
【问题讨论】:
【参考方案1】:您误解了模型-视图-控制器模式。
在类的顶层创建一个模型
var expenses = [NSManagedObject]()
在searchButton
方法中,控制器 将数据加载到模型中并调用reloadData
@IBAction func searchButton(_ sender: AnyObject)
if dateText.text != nil
let request = NSFetchRequest <NSFetchRequestResult> (entityName : "Expense_Table")
request.returnsObjectsAsFaults = false
request.predicate = NSPredicate(format: "expenseDate = %@", dateText.text!)
do
expenses = try self.context.fetch(request) as! [NSManagedObject]
tableView.reloadData()
catch print(error)
在 cellForRowAtIndexPath 中,视图被更新
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! customeCell
let expense = expenses[indexPath.row]
let first = expense.value(forKey : "exoenseName") as! String
let last = expense.value(forKey : "expenseAmount") as! Double
let second = expense.value(forKey: "expenseDate") as! String
// save data in the cell of the tableView
cell.dateText!.text = second
cell.amounttext!.text = String(last)!
cell.nameText!.text = first
return cell
【讨论】:
我尝试了你的代码,它在(让费用 = 费用 [indexPath.row] 处显示错误。另外,我有查询我使用此方法“cellForRowAt”来显示核心数据库中的整个数据,那么如何再次使用它来显示搜索数据呢? 错误是致命错误:Index out of range and near the code Thread 1: EXC_BAD_INSTRUCTION 问题出在方法 numberOfRowsInSection,但我不知道如何解决,请帮助我,我是 IOS 应用程序的新开发人员:( 在numberOfRowsInSection
返回expenses.count
以上是关于使用新数据搜索和重新加载 TableView 记录的主要内容,如果未能解决你的问题,请参考以下文章
TableView 未使用来自 AFNetworking 响应对象的新数据重新加载
尝试搜索 Firestore 并重新加载 tableview 时出现 SearchBar 问题
更改数据和 popViewController 后 TableView 不会重新加载