删除,获取在 CoreData 中关系中属于另一个项目的项目



我在CoreData中创建了Task和ToDo之间的关系。每个任务可以包含很多待办事项,但待办事项只属于特定任务。如果我删除一个任务,那么属于该任务的所有待办事项也应该被删除,所以我将关系设置为级联。我现在拥有的代码仅用于获取和删除所有待办事项。我知道如何将待办事项保存到特定任务,但不知道如何获取和删除它们。我的代码就像获取所有待办事项一样,例如

static func retrieveToDo() -> [ToDo] {
let fetchRequest = NSFetchRequest<ToDo>(entityName: "ToDo")
do {
let results = try managedContext.fetch(fetchRequest)
return results
} catch let error as NSError {
print("Could not fetch (error)")
}
return []
}

关于关系

如果Task实体和ToDo实体之间的关系分别为toDostask,则Task模型类ToDotaskTask类型的属性toDos

类型为NSSet

访问关系

如果你有一个类型为Task的对象,可以使用taskObj.toDos轻松获取该任务的toDos,它将返回ToDo类型的NSSet

如果你有一个ToDo类型的对象,可以使用toDoObj.task轻松获取该 toDo 的task,它将返回一个Task

对于删除

如果删除Task对象,则与该任务相关的toDos将自动删除。

如果您删除ToDo对象,则它将自动从相应的Task中删除

示例代码

class CoreDataHelper {
class func getFetchRequestforModelClass(_ className : NSManagedObject.Type) -> NSFetchRequest<NSFetchRequestResult> {
let stringClassName = String(stringInterpolationSegment: className)
let entityDescription = NSEntityDescription.entity(forEntityName: stringClassName, in: ManagedObjectContext)
let request = NSFetchRequest<NSFetchRequestResult>()
request.entity = entityDescription
return request
}
class func getAllTask() -> [Task]?{
let fetchRequest = CoreDataHelper.getFetchRequestforModelClass(Task.self)
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "task_id", ascending: true)]
var fetchedEntities:[Task]?
do
{
fetchedEntities = try ManagedObjectContext.fetch(fetchRequest) as? [Task]
}catch{
}
return fetchedEntities
}}

最新更新