CoreData сохранение / выборка отношения многие ко многим - PullRequest
1 голос
/ 25 октября 2019

Я хочу достичь простых вещей, но я просто думаю, что упустил некоторый момент, как функционирует 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

Так что, если кто-то может указать мне каким-либо образом или чем-нибудь полезным, это будет высоко оценено. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...