2016-11-07 11 views
0

APIからJSONの束を掴んでレルムデータベースに埋め込む "importData"関数があります。レルム結果コールバックでソート

files: [ 
    300, 
    19, 
    102 
] 

数字は私が前にすでにこれらの取得に処理/インポートしたJSONのための部品でのidのに関連して、基本的に属しているファイルのリストだけです。そのJSONの一部は次のようになりますグループ。

ので、私のレルムオブジェクトのようにこれは、モデル化される。

class SomeGroup : Object { 
    let files = List<File>() 
} 

私はファイルの関係をリンクアップ時に、ファイルが正しい順序になるようにこれらのIDのソート順序を保持する必要があります。

私は次のように私は、クエリを実行するアップリンクする必要があるファイルのモデルをつかむために:

let thefiles = realm.objects(File.self).filter("id IN %@", fileIds) 

問題は、これは別の順序でそれらを返し、.sorted方法が唯一の並べ替えモデルでできています(私がドキュメントから知ることができるものから)属性。

私は結果をループして、基本的なArray<File>またはList<File>型にResult<File>タイプからそれらを回すと考えるので、私は彼らに自分自身を並べ替えることができ、しかしそれはレルムポインタ情報を失うことになるので、私はレルムがすることはできないことを期待しますリンクを作成します。

他の唯一のことは、各ファイルをクエリしてそれをグループファイルの関係に別々に追加することですが、クエリを実行するとクエリの数が急増します。

Result<File>型をカスタム関数/コールバックで注文してjsonのid配列と一致するようにする最良の方法を教えてもらえますか?

+0

ファイルがコレクションに追加される順序は、モデルやワークフローに関連しているなら、あなたはモデルに「注文」キー( 'File'オブジェクト)を追加する必要があります。 JSON入力を反復して 'File'オブジェクトを作成し、後で正しい順序を得るためにクエリーでそれを使用するときに、このオブジェクトを設定します。 –

+0

@bogdanf多対多の関係です。順序キーを設定するには、関係に順序を置く必要があります(mysqlのピボット・テーブルの余分な列に似ています)。 – TRG

+0

はい、正しく、グループとファイルへのリンクとファイルの順番を持つ「関係」オブジェクトを作成してみませんか? –

答えて

0

レルム内のオブジェクトのセットの順序を維持するためのベストプラクティスは、単にオブジェクトをListオブジェクトに格納することです。 SomeGroupfilesプロパティにアクセスするようにロジックを調整できる場合は、最適なアプローチのようです。

さらに、ハッキーなように、新しいRealm Objectモデルを作成することも考えられます。このモデルの役割は、ファイルの順序付きリストを管理することだけです。

class FileList : Object { 
    let files = List<File>() 
} 
+0

あなたが提案したのは、リストはソート順を維持します。問題は、リストが間違った順序である領域結果の照会から作成されることです。関係は多対多であるため、ファイルオブジェクトに整数として注文を格納することはできません(ファイルは表示されるグループによって異なる位置にあります)。私は、カスタムソート関数を使ってリストをソートできるようにしたかったのですが、レルム結果オブジェクトをソートするとこれを許可しません。私はそれをうまく動かすことができなかったので、最終的に中間のピボットオブジェクトに行くことになった – TRG

関連する問題