【问题标题】:delete person with all assigned books删除所有指定书籍的人
【发布时间】:2017-08-18 13:43:52
【问题描述】:

我正在使用 swift 4 for osx。

   let appdelegate = NSApplication.shared().delegate as! AppDelegate
    let context = appdelegate.persistentContainer.viewContext
    var people = [Person]()
    let request = NSFetchRequest<Person>(entityName: "Person")
    do {
       people = try context.fetch(request)
       for person in people {
           print("Person: ", person.name!)
           for book in person.books {
                print("Title: ", book.title!)   
           }           
       }
    }

catch { print(error) }
  • 我必须实体:人物和书籍
  • 我可以创造一个人
  • 我可以创建一本书来分配给一个人
  • 我知道如何获取分配给哪些书籍的信息
    哪个人(上面的代码)

现在我想删除一个拥有所有已分配书籍的人。 我可以一步完成还是让我从实体书籍中请求每一本书 objectID 并删除它?我试过这样的事情:

   let appdelegate = NSApplication.shared().delegate as! AppDelegate
    let context = appdelegate.persistentContainer.viewContext
    var people = [Person]()
    let request = NSFetchRequest<Person>(entityName: "Person")


     people = try context.fetch(request)
       for person in people {
           context.delete(person as! NSManagedObject)
           for book in person.books {
                // request object ID of this book form books and delete it
           }           
       }


    } catch { }

【问题讨论】:

    标签: macos cocoa core-data swift4


    【解决方案1】:

    Core Data 提供“关系删除规则”(请参阅​​CoreData Programming Guide 中的关系删除规则部分)来控制删除对象时相关对象会发生什么。

    在您的情况下,如果您将Person 实体上的books 关系的删除规则设置为“级联”,Core Data 将在您删除Person 时自动删除所有相关的Book 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-12
      • 1970-01-01
      • 2021-12-18
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 2014-12-03
      • 2018-03-20
      相关资源
      最近更新 更多