使用CollectionView删除核心数据中的记录

时间:2018-09-30 19:04:52

标签: ios swift core-data uicollectionview

当您单击CollectionView单元格中的关闭按钮时,我想删除Core Data中的一条记录。我在Collection View Cell控制器中创建了一个UIButton,并在CollectionView Controller文件中添加了扩展名。

indexPath给出了一个数字,我创建了deleteCellNumber,但收到错误消息:

  

'无法将类型'IndexPath.Element(aka'Int')的值转换为预期的参数类型'NSManagementObject'

extension soundboardVC: SoundboardCellDelegate {
    func delete(cell: soundboardCellVC) {

        if let indexPath = collectionView?.indexPath(for: cell) {

            let soundRequest:NSFetchRequest<Soundboard> = Soundboard.fetchRequest()
            let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
            let deleteCellNumber = indexPath[1]

            context.delete(deleteCellNumber)

            (UIApplication.shared.delegate as! AppDelegate).saveContext()

            do {
                soundBoardData = try managedObjectContext.fetch(soundRequest)
            } catch {
                print("Fetching Failed")
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

错误非常明显:

context.delete(...需要一个NSManagedObject实例,但是您传递一个整数(顺便说一下,indexPath[1]是一种非常诡异但有效的获取item / {{1}的方式}值。

假设您有一个数据源数组row,则删除集合或表视图中的Core Data对象的常用方法是

soundBoardData

不要重新获取数据,在数据源数组中的项目中删除,然后在托管对象上下文中删除该项目,从集合视图中删除该行(带有动画)并保存上下文。