2017-08-16 6 views
1

MY DESIGN取得NSOrderedSetとエンティティにキャストすることはmanagedObjectSubclasss

イムコアデータを学ぶためにフィットネスアプリを作って、私はユーザーストアにWorkoutLog項目としてあらゆる行なわワークアウトを聞かせする必要があることを発見した、とそこには、そのエクササイズのパフォーマンスを表す一連のエクササイズログが必要です(それには、それぞれのリフトと実際のエクササイズデザインへの参照が含まれています)。

問題は、しばらくしてから、私はこれらの注文をする必要があることを認識しています。次回は、ユーザーにトレーニングを表示したいときに、エクササイザが実行された順序を同じにする必要があります。

画像の右上に「注文済み」と表示されていたので、今すぐ自分のコードに更新が必要です。私はNSOrderedSetで作業することについてできるだけ多くのことを読むように努力しました。そして、コアデータからそれらを取り出して操作する方法を教えましたが、実際に私には大いに役立ちませんでした。 (私はObjective-Cのにはexpericeを持っていない)

たとえばにするために使用私のコード:.../DatabaseFacade.swift::77::84

static func deleteWorkoutLog(_ workoutLogToDelete: WorkoutLog) { 

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

私はエラーを取得からキャスト " NSOrderedSet? '無関係なタイプの 'Set'には常に失敗します

したがって、セットとコアデータについて学習した内容は適用されなくなりました。

Imはプログラミングの専門家とは遠く離れていますが、loggedExercisesインスタンスへのアクセス方法を知りたいと非常に熱心です。

TLDR; NSOrderedSetを使用できるものにキャストする方法はありますか?コアデータからNSManagedSetsをどのように使用するのですか?それらを配列やMutableSetsにキャストしますか?私は、これらの順序付けられたセットを検索して使い始める方法について、一例または二つを非常に感謝しています!

おかげで、他のコアデータでorderedSetsを始めるためにどのように思って誰のために

+0

は、ユーザが任意に注文した演習であるか、彼らは日付に基づいて設定されたためですか? –

+0

@JonRose私は、ユーザーが任意に演習を手配できるようにしたいと思っていました。私はおそらく彼らに指数を与えていたかもしれませんが、注文したセットを使うのがより適切だと思いました! –

答えて

1

:「多」の関係私の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 

    } 
関連する問題