レルムをXamarinアプリで使用していて、リモートソースに基づいてローカルデータベースをリフレッシュする際に問題があります。データは、リモートエンドポイントからフェッチされ、Realmを使用してローカルに格納され、より簡単に、より高速にアクセスできます。次のようにレルムの書き込みが完了するまで待つ
プログラムフローは、(可能であれば)
- は、リモート・ソースからデータをフェッチします。
- これまでに見たIDを追跡しながら、リモートソースから返されたエンティティをループします。新しいエンティティまたは更新されたエンティティがレルムに書き込まれます。ローカルに保存されているエンティティのセットを通して
- ループ、(トランザクションで)私たちは
Realm.Remove(entity);
とステップ2で見ていないエンティティを削除 - 戻り残念ながら、実体が前にステップ4で返され
Realm.All<Entity>();
すべての「削除」操作が書き込まれています。その結果、ローカルデータベースが完全に同期する前に、いくつかのリフレッシュが必要になります。次のように
削除操作が行われます。
foreach (Entity entity in realm.All<Entity>())
{
if (seenIds.Contains(entity.Id))
{
continue;
}
realm.Write(() => {
realm.Remove(entity);
});
}
は、トランザクションが完了するまでRealm.All<Entity>();
を返す前に、レルム待ちを持ってする方法はありますか?
あなたは私を見ることができますか? – jzeferino
もちろん、最初の投稿に追加しました。 – vicdelfant