【问题标题】:delete, fetch a item that belong to another in a relationship in CoreData删除,获取CoreData关系中属于另一个的项目
【发布时间】:2018-01-02 03:44:01
【问题描述】:

我在 CoreData 中创建了 Task 和 ToDo 之间的关系。每个 Tasks 可以包含很多 toDos,但 toDos 只属于特定的任务。如果我删除一个任务,那么属于该任务的所有 toDos 也应该被删除,所以我将关系设置为 Cascade。我现在拥有的代码仅用于获取和删除所有 toDos。我知道如何将 toDos 保存到特定任务,但我不知道如何获取和删除它们。我的代码就像get all 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 []
}

【问题讨论】:

    标签: ios core-data entity-relationship


    【解决方案1】:

    关于关系

    如果TaskToDo 实体之间的关系分别为toDostask,那么您将在Task 模型类中找到NSSet 类型的toDos 属性, task 类型为 TaskToDo 模型类。

    访问关系

    如果您有一个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
    }}
    

    【讨论】:

    • 你能给我写一些示例代码吗?我还是不知道怎么写。
    • 我还是一头雾水..cry...从特定任务中删除toDos怎么样?
    • 只需删除它会自动从 NSSet 中删除的 toDo 对象,无需执行任何其他操作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多