激活滑动删除时从一行中删除核心数据

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 中检索这两个值。

以上是关于激活滑动删除时从一行中删除核心数据的主要内容,如果未能解决你的问题,请参考以下文章

删除表格视图中的一行而不删除核心数据实体

如何在 Swift 2.0 中滑动删除核心数据表视图

滑动删除函数插入,包括核心数据

滑动删除 UITableView (iOS) 中的整个部分

一旦按下滑动删除按钮,删除功能(提交编辑样式功能)会导致应用程序崩溃

当用户没有完全滑动以删除表格视图单元格时,如何禁用/启用编辑按钮?