Lor*_*esh 6 core-data nsorderedset swift
我正在制作一个健身应用程序来学习核心数据,我发现我需要让用户将每次执行的锻炼存储为锻炼日志项,并且其中应该有一系列代表该锻炼表现的锻炼日志(它包含每个举重动作以及实际练习设计的参考)。
问题是,过了一会儿我意识到我需要对这些进行排序,以便下次我想向用户展示他们的锻炼时,执行练习的顺序应该相同。
所以我检查了图像右上角的“ordered”,现在我的代码急需更新。我尝试尽可能多地阅读有关使用NSOrderedSet以及如何从核心数据中获取它们然后操作它们的内容,但我并没有真正发现对我有多大用处。(我没有 Objective-c 的经验)
例如我以前的代码是:
static func deleteWorkoutLog(_ workoutLogToDelete: WorkoutLog) {
guard let exerciseLogsToDelete = workoutLogToDelete.loggedExercises as? Set<ExerciseLog> else {
print("error unwrapping logged exercises in deleteWorkoutLog")
return
}
Run Code Online (Sandbox Code Playgroud)
我收到错误: .../DatabaseFacade.swift:84:77: Cast from 'NSOrderedSet?' 不相关的类型“设置”总是失败
所以我学到的关于集合和核心数据的知识似乎不再适用。
我远不是编程专家,但我非常渴望学习如何访问实例loggedExercises。
太长了;有没有办法将 NSOrderedSet 转换为我可以使用的东西?我们通常如何使用核心数据中的 NSManagedSets ?我们是否将它们转换为数组或可变集?我非常感谢一个或两个关于如何开始检索和使用这些有序集的示例!
谢谢
对于其他想知道如何开始使用核心数据中的orderedSets的人:
将 WorkoutLog.loggedExercises 设置为要排序的“对多”关系后,我设法通过 mutableOrderedSetValue 函数访问它们,如下所示:
static func deleteWorkoutLog(_ workoutLogToDelete: WorkoutLog) {
let orderedExerciseLogs: NSMutableOrderedSet = workoutLogToDelete.mutableOrderedSetValue(forKey: "loggedExercises")
let exerciseLogsToDelete = orderedExerciseLogs.array
for exerciseLog in exerciseLogsToDelete {
guard let exerciseLog = exerciseLog as? ExerciseLog else {
return
}
Run Code Online (Sandbox Code Playgroud)
到目前为止效果很好。
为了重新排列 NSOrderedSet 我最终做了这样的事情:
// Swap the order of the orderedSet
if let orderedExerciseLogs: NSOrderedSet = dataSourceWorkoutLog.loggedExercises {
var exerciseLogsAsArray = orderedExerciseLogs.array as! [ExerciseLog]
let temp = exerciseLogsAsArray[indexA]
exerciseLogsAsArray[indexA] = exerciseLogsAsArray[indexB]
exerciseLogsAsArray[indexB] = temp
let exerciseLogsAsOrderedeSet = NSOrderedSet(array: exerciseLogsAsArray)
dataSourceWorkoutLog.loggedExercises = exerciseLogsAsOrderedeSet
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3007 次 |
| 最近记录: |