当您单击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")
}
}
}
}
答案 0 :(得分:2)
错误非常明显:
context.delete(...
需要一个NSManagedObject
实例,但是您传递一个整数(顺便说一下,indexPath[1]
是一种非常诡异但有效的获取item
/ {{1}的方式}值。
假设您有一个数据源数组row
,则删除集合或表视图中的Core Data对象的常用方法是
soundBoardData
不要重新获取数据,在数据源数组中的项目中删除,然后在托管对象上下文中删除该项目,从集合视图中删除该行(带有动画)并保存上下文。