使用协议从集合视图单元格中删除核心数据

Posted

技术标签:

【中文标题】使用协议从集合视图单元格中删除核心数据【英文标题】:Delete coredata from a collection view cell using a protocol 【发布时间】:2019-08-16 02:17:01 【问题描述】:

我下面的代码通过删除按钮从索引中删除了一个字符串。但是,它不会从核心数据集中删除。如果刷新视图,集合中的所有项目仍然存在。我想要的只是当用户点击删除函数时,该字符串将被永久删除。这是我的代码https://www.dropbox.com/s/m5fpiilksye4pru/photo2.zip?dl=0的下载链接

 var users = [Item]()
class cell: UICollectionViewCell 
    var delegateA: datacollectionProfotocol?
    var index : IndexPath?
    @IBOutlet var name : UILabel!
    @IBAction func show() 

    
    @IBAction func delete() 
       delegateA?.deleteData(indx: (index?.row)!)
    


protocol datacollectionProfotocol 

func deleteData(indx:Int)

extension ViewController : datacollectionProfotocol 


func deleteData(indx: Int) 
    users.remove(at: indx)
    block.reloadData()

【问题讨论】:

你能解释一下这行我想要的是当用户点击删除函数时,该字符串将被永久删除 当我点击删除按钮时,它不会从索引中删除该项目,它只会隐藏它。当我刷新视图时,该项目仍然存在。所以说 set = a,e,c。我删除了 e 集合应该只是 a,c。现在我的代码没有删除 e。 你的示例代码在我的 mac 上不起作用 【参考方案1】:

您还必须从 Core Data 堆栈中删除该项目(contextNSManagedObjectContext 实例)

func deleteData(indx: Int) 
    let userToRemove = users.remove(at: indx)
    context.delete(userToRemove)
    do 
        try context.save()
        block.reloadData()
     catch  print(error) 

【讨论】:

无论何时您对 Core Data ManagedObjectContext 进行更改,您都必须保存您的上下文以应用所做的更改。这个答案已经在里面了,我只是想强调一下。 我尝试完全按照您的编码进行操作。它不工作我更新了我的链接。可以看看链接吗?

以上是关于使用协议从集合视图单元格中删除核心数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用单元格中的按钮删除集合视图中的项目?

如何通过单击单元格中的按钮来删除 tableView 中的单元格?使用核心数据

如何从集合视图中删除多个选定的单元格? (迅速)

从表格视图单元格中删除 UIlabel 文本

图像未显示在集合视图单元格中

将数据从集合视图单元格移动到新的集合视图单元格