2017-08-16 87 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 

    }