[英]delete, fetch a item that belong to another in a relationship in CoreData
我在CoreData中創建Task和ToDo之間的關系。 每個任務可以包含許多待辦事項,但待辦事項僅屬於特定任務。 如果刪除任務,則也應刪除該任務的所有待辦事項,以便將關系設置為Cascade。 我現在擁有的代碼僅用於獲取和刪除所有待辦事項。 我知道如何將toDos保存到特定任務,但是我不知道如何獲取和刪除它們。 我的代碼就像全部完成任務,例如
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
分別然后你會發現一個屬性作為toDos
類型NSSet
在Task
模型類, task
類型的Task
在ToDo
模型類。
訪問關系
如果你已經類型的對象Task
可以很容易地獲取toDos
通過使用任務taskObj.toDos
它會返回一個NSSet
的ToDo
類型。
如果您有一個ToDo
類型的對象,可以使用toDoObj.task
輕松獲取該toDo的task
,它將返回一個Task
。
刪除
如果刪除Task
對象, toDos
與該任務相關的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
}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.