2016-09-09 12 views
0

私はRealm(Swift)の新人で、最高のアーキテクチャを採用しようとしています。画面でデータをフィルタリングする方法

私はレルムデータベースに保存して表示するオブジェクトA、B、Cをロードする画面1を持っているとします。次に、私は同じタイプのオブジェクトをロードする画面2に行きますが、他のオブジェクトC、D、Eを読み込みます。画面1に戻ると、A、B、C、D、 E.私は以前のようにA、B、Cを探したいので、フィルタリングする必要があります。

私は2つの戦略について考えました: 最初の1つは、私のオブジェクトとavecのuuidsの配列を維持することです。私はuuidsのテーブルに含まれているオブジェクトをクエリしますが、 uuidsの配列は生きていないので、私の変更はuuids配列にuuidsを追加したり削除したりすることによって引き起こされることはありません。

第2の戦略は、どのオブジェクトを表示するかを知るためにモデルに一時的なプロパティを追加することです。問題は、両方の画面にオブジェクトCが含まれていると、一時的なプロパティが変更されているため、訪問した最後の画面で一時的なプロパティが更新され、オブジェクトが前の画面に表示されなくなります。

答えて

0

特定のビューコントローラで特定のレルムオブジェクトに明示的にハングアップする必要がある場合は、これらの特定のオブジェクトをResultsオブジェクトから標準のSwift配列にコピーできます。新しい配列が追加された場合は更新されません。

この解決方法はかなり一時的ですが、後でこのView Controllerを最初から復元したい場合は、実際にこの状態をRealmに永続させること(と言ったようなフィルタを使用すること)が良い選択肢かもしれません。

実際にここで何をしようとしているのかに関する情報を提供する必要がある場合があります(項目A、B、Cは実際に何を表していますか)。あなたはここで解決しようとしています。 :)

+0

私はそれを一度に行いましたが、標準のスウィフト配列に保存されたオブジェクトは良い解決策ではありません。なぜなら、私がカムバックした場合、スクリーン2のスクリーン1とスクリーン2の両方にあるオブジェクトを削除する画面1に戻っても、オブジェクトは配列内に残っていて、割り当てが解除されているので、オブジェクトが有効ではないというメッセージが表示されます。 – Livio

+0

'object.invalidated'プロパティをチェックすることでオブジェクトの状態を確認できます。この画面に戻るときは、そのオブジェクトがまだ有効であることを確認し、そうでない場合はその画面を完全にキャンセルするだけです。 – TiM

+0

ああありがとう!これは実際に素晴らしいです。つまり、画面AのviewWillAppearでfilter({!$ 0.invalidated})を使用して配列をフィルタリングして、その画面に戻るときにクラッシュすることはありません。 – Livio

関連する問題