【发布时间】:2016-11-30 15:18:24
【问题描述】:
我有以下实体和关系
我希望能够设置一个练习,使其例行名称关系的结果为零,如果这有意义吗?以便以后在形成例程实体时将其设置为例程名称。
我的问题是,你如何设置这种属性?我正在尝试以下代码,但它会导致致命的崩溃:
userExercise.usersroutine?.name = nil
我的逻辑是我进行练习并遵循与 name 属性的关系并将其设置为 nil?
感谢您对我的逻辑的任何更正和澄清
编辑:添加了我现有的锻炼和日常保存功能
func createExercise() {
guard let managedObjectContext = managedObjectContext else { return }
if let userExercise = userExercise {
userExercise.name = userExerciseName.text
userExercise.sets = Int64(userSetsCount)
userExercise.reps = Int64(userRepsCount)
userExercise.weight = Double(self.userExerciseWeight.text!)!
userExercise.id = UUID().uuidString
userExercise.routine = nil
}
do {
try managedObjectContext.save()
} catch {
fatalError("Failure to save context: \(error)")
}
}
例程创建:
func createRoutine() {
guard let managedObjectContext = managedObjectContext else { return }
let userRoutine = UserRoutine(context: managedObjectContext)
userRoutine.name = workoutNameTextfield.text
do {
try managedObjectContext.save()
} catch {
fatalError("Failure to save context: \(error)")
}
}
当前获取请求:
fileprivate lazy var fetchedResultsController: NSFetchedResultsController<UserExercise> = {
let fetchRequest: NSFetchRequest<UserExercise> = UserExercise.fetchRequest()
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "id", ascending: true)]
let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.persistentContainer.viewContext, sectionNameKeyPath: nil, cacheName: nil)
fetchedResultsController.delegate = self
return fetchedResultsController
【问题讨论】:
-
这是因为你的 usersroutine 值本身是 nil 并且你试图在它上面设置 name。说得通?首先尝试为例程分配一个值,然后根据需要将 name 设置为 nil。
-
我明白了,那么正确的方法是什么?简单地使用 userExercise.usersroutine = nil 直到我有要设置的名称?
-
你能解释一下你想在日常和锻炼之间建立什么样的关系,以便我更好地理解你的问题并给出一个可行的解决方案。
-
1 个例程将包含许多练习,但一个练习只属于一个例程,我希望例程构建器查看练习并将所有具有 nil 关系的练习导入其中,因为它们还没有分配给其他例程,然后我可以保存例程,将其名称应用于那些替换 nil 的练习,创建一个带有属性练习的例程。套路在创建练习时不存在,它是在之后创建并设置它的名称
标签: swift core-data entity relationship