2017-01-23 9 views
0

私は領域に新しいですし、私を満足させる解決策が見つかりませんでした。ベストプラクティス非永続プロパティを扱う、頻繁な更新

私はgpsデータなどでツアーを録画できるアプリケーションがあります。 (レルムに格納されている複数の異なるオブジェクトがあります)。 私は自分のオブジェクトのすべてのrealm suff(update、create、delete)を行うべきrealmシングルトンを作成しました。

私は以下の問題に遭遇しました。 ツアーを開始して録画します。最初に作成され、すべてが正常です。私は私のツアーオブジェクトといくつかのプロパティ(基本的にそれぞれの新しいGPSポイントを更新する)を更新する必要があるポイントに来ました。追加の要件は、領域に永続的でなく、オブジェクトインスタンス上にのみ存在するプロパティが存在する可能性があるということです。

これで、すべてのプロパティをオーバーライドするrealm.add(object、update:true)を呼び出すオプションがあります。 私はこの論理レベルの書き込みコンテキストがないので、object.prop1 = asdf、object.pro2 = 345と言うことはできません。 realm.create(type、updatedict、update:true)内で更新することができます。 しかし、このアプローチの大きな欠点は、私のオブジェクトインスタンスの変更を "知る"ために再びオブジェクトを再フェッチする必要があることです。

オブジェクトの一部のプロパティを更新すると、 id(主キー)と変更するプロパティを持つ辞書を作成します。 私の領域シングルトンで呼び出し更新を行い、必要なすべてのデータを渡します。 新しいオブジェクトを再度取得するために、realmインスタンスのフェッチを呼び出します。これにより、永続化されていない既存のプロパティ値が緩和されます。

私はそのような要件を持つ最初のだが、私は解決策を見つけることができませんでした疑う:

概要: レルムシングルトンクラス書き込みコンテキスト内にないことができます 異なるレルム・オブジェクト・クラスのすべてのレルムのアクションを扱います永続オブジェクト 一部のプロパティで部分的に更新する必要があります 自分のviewcontrollersロジックにrealmコードを持たせたくありません。

答えて

0

コード例なしで何かを提案するのは難しいですが、個人的には、モデルの個々のプロパティを更新する能力がないのは良い考えではないと思います。

  1. はあなたが書き込みコンテキストは(ライト・トランザクション内のブロックを実行する)を取得することができ、あなたのRealmSingletonにメソッドを追加し、よう:

    func updateTour(updateBlock: (Tour) -> Void) { 
        realm.write { 
         updateBlock(currentTour) 
        } 
    } 
    
    ... 
    
    RealmSingleton.shared.updateTour { tour in 
        tour.property = value 
    } 
    
  2. は、私はあなたが2つのオプションを持っていると思います

  3. Tourオブジェクトの個々のプロパティを更新する便利なメソッドを追加してください:

    RealmSingleton.shared.setTourProperty(value) 
    
関連する問題