2017-07-30 23 views
0

Realmオブジェクトcreated_atupdated_atに2つのタイムスタンプを実装したいと思います。レルムのcreated_atとupdated_atタイムスタンプ

created_atは、オブジェクトが最初にデータベースに挿入されたときに1度だけ設定されます。

updated_atは、オブジェクトが変更および保存されるたびに新しいタイムスタンプを格納します。

これを行うことができる唯一の方法は、createupdateという機能を持つリポジトリパターンを使用して、タイムスタンプを設定することです。しかし、このパターンを採用することは、かなり多くのコードをリファクタリングすることを意味します。私は有用な代替されているだろうオブジェクトモデル自体に実装することができ、このようなbeforeSave & afterSaveとしてフックの任意の並べ替えを持っていないレルムのオブジェクトを伝えることができるものから、

realm.writeがアプリケーション全体に適用される前に、リポジトリパターンを除いて、またはタイムスタンプを手動で更新する以外に、これを達成できる方法はありますか?

答えて

1

あなたが探しているものを達成するためにはRealmという2つの方法があります。

最初の方法は、同じ名前の広く使用されているデザインパターンを実装するKey-Value Observationです。 Apple's documentation on the topicを参照してください。

第2の方法は、Notificationsと呼ばれるRealm独自の代替方法です。特定のRealmインスタンスへの各書き込みトランザクションに関する通知を取得し、処理する必要があるものを処理するか、single Objectsに関する通知に登録できます。

Realmオブジェクトのupdated_atプロパティを更新するには、両方の方法を使用できます。 created_atプロパティの扱いはさらに簡単です。オブジェクトの初期化時に不変の値に設定するか、オブジェクト初期化関数内で自動的に行うこともできます。

+1

あなたの応答David(ありがとう)に感謝します。もし私が良いアイデアかもしれないすべての単一のモデルを管理している集中 "TimestampManager"を持っていた。 私は 'created_at'のinitについてDateを考えましたが、' realm.add'の更新オプションを使用するのではなく、オブジェクトをフェッチして保存するだけでした。 "フェッチ&セーブ"した場合、日付は変更されませんが、 'realm.add(obj、update:true)'では、 'created_at'は' updated_at'になります。私は通知を行くだろう:) – TRG

関連する問題