使用新数据搜索和重新加载 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 不会重新加载

使用子视图中的数据重新加载 tableview

带有 TabBar 的 TableView 使用函数在没有新 ViewControllers 的情况下重新加载表格

Obj-C - 数据重新加载后TableView滚动到底部?