我想实现简单的东西,但是我只是想我错过了coreData的功能。因此,我创建了一个createSession函数,该工作是创建会话并进行一些练习。一个练习应该能够与多个会话建立联系,反之亦然。所以我做了以下数据模型:
我从这里开始制作了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)
}
}
}
}
打印输出示例:
保存打印件:
获取照片:
因此,如果有人能以某种方式向我指出或提供任何帮助,将不胜感激。 谢谢!