ios - CoreData 保存/获取多对多关系
问题描述
我想实现简单的东西,但我只是觉得我错过了 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)
}
}
}
}
打印输出示例:
保存打印:
- Løb 保存在名为:Mandag 的会话下
- Bænnkpres 保存在名为:Mandag 的会话下
- 会话“Mandag”已成功保存。
获取打印:
- 这里 1。
- 这里2。
- 这里 3。
- 这里 4。
- 曼达格
- 这里 5。
- 0
因此,如果有人能以某种方式或任何有帮助的方式指出我,将不胜感激。谢谢!
解决方案
推荐阅读
- python-3.x - pymongo.errors.OperationFailure: $in 需要一个数组
- java - 级别完成对话框按钮功能
- javascript - javaScript - 如何将多个动态值分配给循环中的变量
- tableau-api - Tableau 中的 IFNULL 函数
- python - Python:验证正则表达式,在字符串中找到匹配项
- php - 显示用于发送表单数据的 ajax 消息框
- javascript - 在 TypeScript(Ionic)上生成时,Iframe(加载)不起作用
- javascript - 为什么我在尝试访问获取请求后返回的对象时未定义?
- django - 如何自定义平面页面以与 django-oscar get_model 一起使用
- android - 如果失败,Kotlin 对象需要再次发生 init