2017-08-16 82 views
1

MY DESIGN从核心数据检索NSOrderedSet它铸造于实体managedObjectSubclasss

林做健身应用学习的核心数据,我发现,我需要让用户存储每进行锻炼作为WorkoutLog项目,在那里,应该有一系列表示锻炼表现的锻炼日志(它包含每个升降机以及对实际锻炼设计的参考)。

问题是,过了一段时间,我意识到我需要对这些命令进行排序,以便下一次我想向用户显示其锻炼时,执行的顺序应该是相同的。

所以我检查了图像右上方的“有序”,现在我的代码急需更新。我试图尽可能多地阅读关于使用NSOrderedSet以及如何从核心数据获取它们然后操作它们,但我没有真正发现太多用处。 (我有在Objective-C没有experice)

例如我的代码,曾经是:

static func deleteWorkoutLog(_ workoutLogToDelete: WorkoutLog) { 

    guard let exerciseLogsToDelete = workoutLogToDelete.loggedExercises as? Set<ExerciseLog> else { 
     print("error unwrapping logged exercises in deleteWorkoutLog") 
     return 
    } 

我得到的错误:.../DatabaseFacade.swift:84:77:从投放] NSOrderedSet?到无关类型“集合”总是失败

因此,关于集合和核心数据的知识已不再适用。

我远离编程专家,但我非常渴望学习如何访问loggedExercises实例。

TLDR;有没有办法将NSOrderedSet投射到我可以使用的东西上?我们通常如何从核心数据处理NSManagedSets?我们将它们转换为数组还是MutableSet?我非常感谢一个或两个关于如何开始检索和使用这些有序集的例子!

感谢

+0

由用户任意订制的练习,或者是他们根据日期设定的顺序? –

+0

@JonRose我希望用户能够随意安排练习。我可能会给他们一个索引,但是我认为使用有序集合会更合适! –

回答

1

对于任何人想知道如何开始与核心数据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 
    } 

伟大的工程至今。

并重新排列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 

    }