使用新数据搜索并重新加载 TableView 记录
Search and Reload TableView Records with new data
我正在开发 IOS 应用程序,使用 Xcode 8 和 swift 3。我的应用程序在 tableView 中显示了项目列表 我想按日期搜索特定项目 "using 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{}
}
}
您误解了模型-视图-控制器模式。
在 class
的顶层创建一个 模型
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 中 view 已更新
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
}
我正在开发 IOS 应用程序,使用 Xcode 8 和 swift 3。我的应用程序在 tableView 中显示了项目列表 我想按日期搜索特定项目 "using 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{}
}
}
您误解了模型-视图-控制器模式。
在 class
的顶层创建一个 模型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 中 view 已更新
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 }