2017-04-11 9 views
1

私はrealmListを持っています。私は与えられたクラスの学生のリストを要求し、studentListの中でそれを更新したい。 返されたサーバーのstudentListには、古い学生と新しい学生が含まれる場合があります。だから私は本当の一流の人が古い学生のための情報を更新し、もしあれば新しい学生を加えることを望みます。私がやった何RealmListのrealmObjectの追加/更新

  1. は、サイズのループを開始== serverReturnedStudentList.size()
  2. 作成されたループ内の学生とレルムに追加が
  3. (realm.copyToRealmOrUpdate(学生)を使用して)
  4. クラスXの受講者リストを取得し、studentListにそのmanagedObjectが含まれているかどうかを確認します。
  5. もしそうでなければ、studentをstudentListに追加しました。それ以外は何もしませんでした。

期待どおりに動作していますが、これは正しいアプローチではありません。 「contains」チェック(@ step4)をスキップし、管理対象オブジェクトをrealmListに直接追加すると、複数のエントリがrealmListに表示され始めます。

このシナリオを処理するにはどうすればよいでしょうか?

もう1つ問題は、各クラスの下に「n」個のクラスと「x」セクションがあることです。私は並行してnxリクエストを作成していますが、asyncExecutionsをnx回起動しようとすると、プールサイズ制限の例外(明白です)が発生し、UIが3〜5秒間応答しなくなる各学生リストのループは、学生ごとにexecuteTransactionで実行されています)

ご意見やご提案は高く評価されます。

ありがとうございました。乾杯!

+0

'複数のエントリがrealmListに表示され始めます。このシナリオを処理する最良の方法は何でしょうか? 'あなたは' @ PrimaryKey'を持っていますか? – EpicPandaForce

+0

また、生徒ごとにトランザクションを実行しないでください。その理由はわかりません。 – EpicPandaForce

+0

@EpicPandaForceはい私は各生徒オブジェクトのプライマリキーを持っていますし、さらに明確にするために、生徒のための単一のオブジェクトxがありますが、studentList.contains(studentX)ステップをスキップするとstudentListのstudentXに複数のエントリがあります学生リストにstudentXを追加する。 – AndoAiron

答えて

0

このアプローチは大丈夫です。あなたが理解する必要があることの1つcopyToRealmOrUpdate()あなたのrealmListを更新するために、同じプライマリキーを持つエントリのデータを複製しません。

+0

はい私はcopyToRealmOrUpdate()の背後にあるコンセプトを理解しています。各生徒オブジェクトのプライマリキーがあります。さらに明確にするために、生徒はxと言うオブジェクトは1つしかありませんがstudentListのstudentXには複数のエントリがありますStudentListにstudentXを追加する前にstudentList.contains(studentX)ステップをスキップします。 – AndoAiron

+0

それでは、この問題を解決しましょう。studentXと他の人たちのための多数のエントリーを含むstudentListがあります。 studentList.contains(studentX)でstudentXをリストから分離し、studentXを更新しようとしているとします。それは...ですか? –

+0

私は正確にあなたを得ていませんでした。私が望むのは、リストにない場合はstudentListにstudentを追加するか、リストにある既存の学生の情報を更新するだけです。学生が既にstudentListに出席している場合、copyToRealmOrUpdate(unManagedStudent)を実行すると、情報が更新され、実行する必要はありません。その学生がstudentListにない場合は、copyManualStudentをrealmListに追加するもう1つのステップとともに、copyToRealmOrUpdate(unManagedStudent)を実行する必要があります。 – AndoAiron

関連する問題