我有以下实体和关系
如果这有意义的话,我希望能够将练习设置为其常规名称关系的结果为零?以便以后可以在形成例程实体时将其设置为例程名称 .
我的问题是,你如何设置这种属性?我正在尝试以下代码但它会导致致命的崩溃:
userExercise.usersroutine?.name = nil
我的逻辑是我参加练习并遵循与name属性的关系并将其设置为nil?
感谢您对我的逻辑进行任何更正和澄清
EDIT: Added my existing exercise and routine save functions
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
2 回答
请检查下面的实现我已经创建了一些练习和例程 . 同时阅读代码中的注释,这将帮助您弄清楚如何去做 .
添加新练习的功能
添加新例程的功能
获取主NSManagedObjectContext的函数,我们可以在其上执行核心数据操作
下面,首先,我创建一些与例程没有任何关系的练习
然后通过传递一些练习来创建例程(You can refer to other answer on how to fetch exercises with routine as nil values)
更新create routine函数以查询UserExercise的结果,其中usersroutine为nil
您似乎根本不需要使用
name
属性 . 此属性应用于存储UserRoutine
的实际名称,而不是基于任何关系 .Core Data中的实体之间的关系不依赖于实体的特定属性,而是依赖于实体本身 .
所以...
创建一个获取请求以获取
UserExercise
的所有没有相关UserRoutine
的实体(即userroutine
为零) .执行此获取请求以获取UserExercises数组(没有相关例程)
将获取的
UserExercise
entitit属性userRoutine
设置为例程(并且不要忘记在管理对象上下文中保存更改) .之后,如果您想要针对特定例程进行练习: