2016-04-11 4 views
0

私は素早いプロジェクトでレルムを使用します。ここでレルムを持つviewControllerとレルムとの間にモデル状態を保存する - それはリレーションを破ります

は私のオブジェクト、食事と反応している - 多くの1つのマッピングを持つ:

enum DishType: String{ 
    case Breakfast 
    case Second_breakfast 
    case Brunch 
    case Elevenses 
    case Lunch 
    case Tea 
    case Dinner 
    case Supper 
    case Snack 
} 

class Meal : Object{ 
    dynamic var date: NSDate = NSDate() 
    dynamic var dishType = DishType.Breakfast.rawValue 

    var dishTypeEnum: DishType{ 
    get{ 
     return DishType(rawValue: dishType)! 
    } 
    set{ 
     dishType = newValue.rawValue 
    } 
    } 

    dynamic var foodItems: String = "" 
    var reactions = List<Reaction>() 
} 


enum Category: String{ 
    case Apetit 
    case Energy 
    case Emotion 
} 

enum Type: String{ 
    case Positive 
    case Negative 
} 

class Reaction: Object{ 

    dynamic var category = Category.Apetit.rawValue 
    dynamic var text: String? 
    dynamic var selected: Bool = false 
    dynamic var type = Type.Positive.rawValue 
    ..... 
} 

私は、他の1つのViewControllerから状態を保存する必要があります。 私はいくつかの反応を選択します。これは、反応画面に戻るときに選択しなければならないものです。

saving Reaction state

私はレルムに節約を考えていたが、私はまた、新しいデータセットを入力するときに、すべての反応状態をクリアする必要があります。 Reactionから削除すると、関係も破損しているようです。 Mealオブジェクトが保存されています(Reactionとの関係もあります)。

保存されている食事から、状態を示す反応と関係している反応を区別する方法はわかりません。

NSUserDefaultsの州の反応を保存すると思っていました。しかし、このように私は両方のフレームワークを組み合わせるでしょう。

あなたはどう思いますか?どのように状態を保存しますか?

答えて

2

私はRealmに保存することを考えていましたが、新しいデータセットを入力するときにすべての反応状態をクリアする必要もあります。 Reactionから削除するときにも、関係を壊すように見えます。 Mealオブジェクトが保存されています(Reactionとの関係もあります)。

Reactionオブジェクトに変更を加えると、これらの変更は反応がリンクされた場所に表示されます。だから、言い換えればそうでない限り、彼らに変更を加えるつもりはないでしょう。 (例えば、「あなたは砂漠を望んでいない」=>「あなたはデザートが必要ない」という誤植を修正する)また、それらを削除すると、それらはリンクされたMealオブジェクトからも削除されます。

NSUserDefaultsの州の反応を保存すると思っていました。しかし、このように私は両方のフレームワークを組み合わせるでしょう。

これは必須ではありません。レルムを使用することで、ユースケース全体を解決できます。

selectedにはReactionという属性は含まれていません。代わりに、選択した反応をMealに追加するだけです。ビューコントローラでは、それぞれReactionのセルをレンダリングするには、すべてをlet reactions = realm.objects(Reaction)で照会します。食事のための反応が選択されている場合

meal.reactions.contains(reaction) 

は、あなたが

を追加します。

あなたは、あなたは彼らがこのようなMealの反応に含まれているかどうかを確認することで、チェックマークを追加する必要があるかどうかを把握することができますそれ食事へ:

meal.reactions.add(reactions[indexPath.row]) 

反応の選択が解除された場合、あなたは食事からそれを削除します。

meal.reactions.removeAtIndex(meal.reactions.indexOf(reactions[indexPath.row])) 
+0

私はあなたの優雅なソリューションが好きです。しかし、レルムにすべてのリアクションを追加する必要があります。そうすれば、私はビューコントロールの準備が整いますか? –

+0

彼らはどこから来たのですか?私は、彼らが最初のアプリの起動からすでにそこにいるはずだと思う。レルムデータベースをセットアップしてすべての反応を作成し、そのデータベースをプロジェクトにコピーする別のターゲットを作成することができます。 .realmファイルをプロジェクトに追加し、最初の起動時にそのファイルをアプリケーションバンドルからユーザーデータディレクトリにコピーするようにしてください。 ( 'Realm.Configuration.defaultConfiguration.path') – marius

+0

あなたの提案を試しています。ありがとうございました! –

関連する問題