2017-05-24 22 views
2

私はモバイルデータベース用にRealmを使用するXamarin Formsアプリケーションを持っていますが、「System.InvalidOperationException:No RealmObjectsがあります。例外はAndroidのみで、Visual Studioからデバッグセッションの外でアプリを開いているときに限ります。Xamarin Forms Androidアプリケーションの起動時にRealmObjectが見つかりません

デバッガでVisual Studioからアプリを起動すると、アプリは正常に動作し、Realmが正しくロードされます。デバッグセッションを停止してデバイス上のアプリケーションを再度開くと、その例外が発生し、アプリケーションがクラッシュします。 Visual Studioからデバイスにアプリケーションを公開して起動するだけで、その例外も表示されます。 iOSは正常に動作し、このエラーは表示されません。

私は、Realm 1.2.1から1.4.0にアップデートされたDebugビルドとReleaseビルド、無効化されたリンク、ProGuardなどを試してみましたが、いずれも問題を解決しませんでした。

私たちのプロジェクトは、すべてのRealmオブジェクトが、プラットフォーム固有のプロジェクトによって参照される別の.NET Standard 1.6プロジェクトに含まれるように構成されています。 Realmモデルプロジェクトと同様に、プラットフォームプロジェクトにもRealm 1.4がインストールされています。

生成されたRealmModuleInitializer.Initialize()メソッドがRealmSchemaクラスのデフォルトタイプリストに36個のRealmObjectsを追加していることを確認するために、私たちのRealmモデルプロジェクトからの出力dllを反映するためにdotPeekを使用しました。適切に動作します。

デバッグセッションの外でAndroidでこれを動作させることができる他に何かがありますか?

+0

[email protected]で小さなレトロケースを隔離したり、プロジェクト全体を私的に共有することができると思いますか? –

+0

@Nikolarinchev私はそれを共有することはできませんアプリで十分な機密情報があります。しかし、.NET標準ライブラリを使って全く同じ構造になっているデモプロジェクトを作成して、それを再作成して渡すことができるかどうかを確認します。 –

+0

@Nikolarinchev私は、この問題の原因となったものを具体的に把握しました。アプリケーションの起動時に、Realmインスタンスを取得する前に、Realmプロジェクトからクラスのインスタンスを構築していた場所に、リンカーの回避策がありました。デフォルトのコンストラクタを持つRealmプロジェクトのクラスを使用するようにそのインスタンス化を変更すると、すべて正常に動作します。したがって、独自のコンストラクタを持たないRealmObjectから拡張されたものを構築することに関連しているようです。 –

答えて

1

他の誰かがこの問題に遭遇した場合の詳細を以下に示します。

レルムスキーマは、レルムオブジェクトが定義されているアセンブリ内のモジュールイニシャライザによって処理されます。モジュール初期化子は、そのモジュールのコードが初めてロードされたときに実行されるはずです。 Realmオブジェクトをすべて自分のプロジェクトに取り込んだので、Realmインスタンスを作成する前にそのプロジェクトからコードを実行する必要がありました。そうしないと、スキーマは定義されませんでした。しかし、実行していたコードにはデフォルトのコンストラクタがありませんでしたので、RealmObjectコンストラクタに落ちて問題が発生していました。デフォルトのコンストラクタを持つコードを実行することで、すべての問題が解消されました。

関連する問題