Swift CoreData清除表视图中的属性数据

Swift CoreData清除表视图中的属性数据,swift,tableview,Swift,Tableview,我环顾四周,似乎没有一个明确的答案? 我有一个表视图控制器,当我删除单元格并希望它删除通过segue链接到的第二个表视图控制器中显示的数据时。因此,删除时,应清除核心数据属性形状。使用下面的代码,我只能删除属性中的一个密钥对,而不是全部 override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath)

我环顾四周,似乎没有一个明确的答案? 我有一个表视图控制器,当我删除单元格并希望它删除通过segue链接到的第二个表视图控制器中显示的数据时。因此,删除时,应清除核心数据属性形状。使用下面的代码,我只能删除属性中的一个密钥对,而不是全部

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {
        context!.delete(array[indexPath.row])
        array.remove(at: indexPath.row)
        let fetchRequest = NSFetchRequest<Notes>(entityName: "Notes")
        fetchRequest.predicate = NSPredicate(format: "shape = %@")
        saveList()
        do {
            let shapes = try context!.fetch(fetchRequest)
            for shape in shapes {
                context!.delete(shape)
                let managedObjectData:NSManagedObject = shape as NSManagedObject
                context!.delete(managedObjectData)
            }
            try context!.save()
        } catch _ {
            // error handling
        }
        tableView.reloadData()
    }
}
重写func tableView(tableView:UITableView,commit editingStyle:UITableViewCell.editingStyle,forRowAt indexPath:indexPath){
如果editingStyle==.delete{
context!.delete(数组[indexPath.row])
array.remove(位于:indexPath.row)
let fetchRequest=NSFetchRequest(entityName:“Notes”)
fetchRequest.predicate=NSPredicate(格式:“shape=%@”)
存储列表()
做{
让形状=尝试上下文!.fetch(fetchRequest)
形状中的形状{
上下文!.delete(形状)
让managedObjectData:NSManagedObject=形状为NSManagedObject
上下文!.delete(managedObjectData)
}
尝试上下文!.save()
}接住{
//错误处理
}
tableView.reloadData()
}
}


是否有一种简单的方法可以清除属性中的所有数据?

是的,实现这一点的最快和正确的方法是使用Coredata删除规则。我猜在CoreData模型中,你们有一对多的关系——每种颜色都与某种形状有关。
因此,在Coredata编辑器中,进入Identity Inspector并将关系的删除规则设置为
cascade
。这意味着,一旦你删除了一种颜色,它的所有对应形状将自动从Perstistence商店中删除,而无需通过循环来手动删除它们

谢谢你,这太有用了!为我指明了方向:这一起解决了我的问题。还可以使用以下命令删除整个实体: