c# - 启动 Xamarin Forms Android 应用程序时未找到 RealmObject

标签 c# xamarin realm

我有一个 Xamarin Forms 应用程序,它使用 Realm 作为我们的移动数据库,并且我们收到“System.InvalidOperationException:没有 RealmObjects。链接器是否已剥离它们?”仅在 Android 上出现异常,并且仅当您在 Visual Studio 的调试 session 之外打开应用程序时才会出现异常。

如果您使用调试器从 Visual Studio 启动应用程序,则该应用程序可以正常工作并正确加载 Realm。如果您停止调试 session ,然后在设备上重新打开应用程序,您将收到该异常并且应用程序崩溃。如果您只是从 Visual Studio 将应用程序发布到设备,然后启动它,您也会看到该异常。 iOS 工作正常,不会出现此错误。

我尝试过进行调试和发布构建、禁用链接、ProGuard 等...,从 Realm 1.2.1 更新到 1.4.0,但这些都没有解决问题。

我们的项目是结构化的,因此我们的所有 Realm 对象都位于一个单独的 .NET Standard 1.6 项目中,该项目由我们的平台特定项目引用。我们在平台项目和 Realm 模型项目中安装了 Realm 1.4。

我使用 dotPeek 反射(reflect) Realm 模型项目的输出 dll,以验证生成的 RealmModuleInitializer.Initialize() 方法是否将所有 36 个 RealmObject 添加到 RealmSchema 类的默认类型列表中,因此编织步骤应该有效正确地。

除了调试 session 之外,我还可以尝试其他什么方法来使其在 Android 上正常运行吗?

最佳答案

这里有一些更多详细信息,以防其他人遇到此问题。

Realm 架构由定义 Realm 对象的程序集中的模块初始值设定项进行处理。当第一次加载该模块中的任何代码时,模块初始值设定项应该运行。由于我们已将所有 Realm 对象提取到它们自己的项目中,因此我们需要在创建 Realm 实例之前执行该项目中的代码,否则将无法定义模式。但是,我们运行的代码没有默认构造函数,因此它会回落到 RealmObject 构造函数中,从而导致问题。通过执行具有默认构造函数的代码,我们所有的问题都消失了。

关于c# - 启动 Xamarin Forms Android 应用程序时未找到 RealmObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44164628/

相关文章:

java - 如何在graphql中查询两个日期

c# - 在 .NET 中仅使用没有相应字段的属性的缺点?

c# - DataGridView 在更改 Checkbox 值后直接更新数据源

c# - 有时可以获取文本但有时显示 "Unable to find element with selector"

c# - 时间格式 C# - 防止月份被转换为母语

android - MVVMCross Binding 导致 Android 应用程序崩溃

c# - 我如何通知容器对象一个属性已经从被改变的对象中改变了?

java - 从 Realm 中获取通用类型的 Realm 对象

ios - 来自服务器的数据库中的 Realm 更新结果

c# - 订阅和取消订阅单元格按钮单击事件在 iOS 11 中不起作用