激活滑动删除时从一行中删除核心数据
Posted
技术标签:
【中文标题】激活滑动删除时从一行中删除核心数据【英文标题】:delete core data from a row when swipe to delete is activated 【发布时间】:2016-10-25 07:34:56 【问题描述】:我正在 swift 3.0 中处理一个项目,我正在表格视图上填充数据,我将其保存在另一个视图控制器(来自两个文本字段)的核心数据实体上。当从我的阵列和核心数据中激活滑动删除时,我想删除数据。我在 UITableView 类上的代码如下。
import Foundation
import UIKit
import CoreData
class MyExpencesViewController: UIViewController,UITableViewDelegate, UITableViewDataSource
@IBOutlet weak var expensesTableView: UITableView!
var myExpensesArray = [String] ()
var myAmountArray = [String] ()
override func viewDidLoad()
super.viewDidLoad()
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
loadData()
self.expensesTableView.reloadData()
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return (myExpensesArray.count)
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell: MyExpensesTableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell") as! MyExpensesTableViewCell
cell.myExpenseName.text = myExpensesArray [indexPath.row]
cell.myExpenseAmount.text = myAmountArray [indexPath.row]
return cell
func loadData ()
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
let request = NSFetchRequest <NSFetchRequestResult> (entityName: "UserExpenses")
request.returnsObjectsAsFaults = false
do
let results = try context.fetch(request)
// check data existance
if results.count>0
print(results.count)
for resultGot in results as! [NSManagedObject]
if let expName = resultGot.value(forKey:"expenseName") as? String
myExpensesArray += [expName]
DispatchQueue.main.async
[unowned self] in self.expensesTableView.reloadData()
self.expensesTableView.reloadData()
print("myExp array is : \(myExpensesArray)")
if let amountVal = resultGot.value(forKey:"amount") as? String
myAmountArray += [amountVal]
DispatchQueue.main.async
[unowned self] in self.expensesTableView.reloadData()
self.expensesTableView.reloadData()
print("myAmount array is : \(myAmountArray)")
catch
print("No Data to load in the array")
【问题讨论】:
有什么问题? 【参考方案1】:您必须再添加 2 种方法才能在滑动时删除行
//For swipe access allow
func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool
return true
//For remove row from tableview & object from array.
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)
if (editingStyle == UITableViewCellEditingStyle.delete)
// delete data and row
<YourArray>.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)
如果您需要更多详细信息,请告诉我。
【讨论】:
这不会从核心数据中删除我的数据。我也在寻找从我的核心数据中删除的代码。因此,即使我在重新运行应用程序时从 tableview 中删除,它也会再次加载并填充到我的 UItableview 中(看看我的 viewWillAppear 方法,有一个从核心数据加载数据的函数) 所以你必须在你的问题中提到我想从核心数据实体中删除数据。 如果您能对此提供帮助将不胜感激 我有一个名为 UserExpenses 的实体,它有两个属性,称为费用名称和金额。有两个文本字段可以输入这些详细信息,一旦输入并按保存,它们将被保存到核心数据中。然后我将在我上传了上面代码的 viewController 中检索这两个值。以上是关于激活滑动删除时从一行中删除核心数据的主要内容,如果未能解决你的问题,请参考以下文章