我在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
实体之间的关系分别为toDos
和task
,则Task
模型类ToDo
中task
Task
类型的属性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
}}