CoreData保存/获取多对多关系

时间:2019-10-24 22:12:14

标签: ios swift core-data nsmanagedobject nsmanagedobjectcontext

我想实现简单的东西,但是我只是想我错过了coreData的功能。因此,我创建了一个createSession函数,该工作是创建会话并进行一些练习。一个练习应该能够与多个会话建立联系,反之亦然。所以我做了以下数据模型: enter image description here

我从这里开始制作了ExerciseMO和SessionMO:

class SessionMO: NSManagedObject {

@NSManaged var name: String?
@NSManaged var exercises: NSSet

}

class ExerciseMO: NSManagedObject {

@NSManaged var name: String
@NSManaged var mainMuscle: Int
@NSManaged var difficulty: Bool
@NSManaged var session: SessionMO

}

我的保存功能:

func createSession(name: String, exercisesConnect: [ExerciseMO]){

    var newExercises: NSSet = []

    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
    let managedContext = appDelegate.persistentContainer.viewContext

    for exercise in exercisesConnect {

        let newExercise = exercise as ExerciseMO
        let session = NSEntityDescription.insertNewObject(forEntityName: "Sessions", into: managedContext) as! SessionMO
        session.name = name
        newExercise.sessions?.adding(session)

        print("\(newExercise.name!) is saved under session named: \(session.name!)")
    }

    do {
        try! managedContext.save()
        print("Session '\(name)' is saved successfully.")
    }
}

并且有效,或者idk(如果有效)。因为当我尝试获取会话并连接练习时,总会得到0。

我的提取功能:

func findSession(name: String) {

    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
    let managedContext = appDelegate.persistentContainer.viewContext
    let sessionEntity = NSEntityDescription.entity(forEntityName: "Sessions", in: managedContext)!

    let sessionFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Sessions")
    sessionFetch.fetchLimit = 1
    sessionFetch.predicate = NSPredicate(format: "name = %@", name)

    print("Here 1.")

    do {

        print("Here 2.")
        let sessions = try! managedContext.fetch(sessionFetch)
        print("Here 3.")
        for session in sessions as! [SessionMO] {
            print("Here 4.")
            print(session.name!)
            if let exercises = session.exercises {
                print("Here 5.")
                print(exercises.count)

            }
        }
    }
}

打印输出示例:

保存打印件:

  • Løb保存在名为Mandag的会话下
  • Bænnkpres保存在名为Mandag的会话下
  • 会话“ Mandag”已成功保存。

获取照片:

  • 这里1。
  • 这里2。
  • 这里3。
  • 这里4。
  • 曼达
  • 这里5。
  • 0

因此,如果有人能以某种方式向我指出或提供任何帮助,将不胜感激。 谢谢!

0 个答案:

没有答案