Docs Menu
Docs Home
/ /
Kit de desarrollo de software .NET

Solución de problemas - SDK .NET

Es posible que veas un System.InvalidOperationException con el mensaje "No hay propiedades en la clase, ¿el enlazador las ha eliminado?".

Hay tres causas conocidas de esta excepción:

Este error de compilación común se activa cuando ya ha compilado un proyecto y luego agrega una nueva subclase RealmObject. Al elegir Build o Run su proyecto no se reconstruye con la suficiente precisión como para invocar Fody Weaver. Para solucionar esto, elija Rebuild su proyecto.

Es posible que vea una advertencia en el registro de compilación sobre clases que no se han tejido. Esto indica que el paquete de tejido Fody no está instalado correctamente. Aquí tiene algunos puntos a revisar:

  • Primero, verifique que el archivo FodyWeavers.xml contenga una entrada para Realm.

  • También es posible que la instalación de Fody haya fallado. Algunos usuarios han experimentado esto con Visual Studio 2015 y versiones del Administrador de paquetes NuGet anteriores a la 3.2. Para diagnosticarlo, use un editor de texto para comprobar que su .csproj tenga una línea que importe Fody.targets, como por ejemplo:

    <Import Project="..\packages\Fody.1.29.3\build\portable-net+sl+win+wpa+wp\Fody.targets"
    Condition="Exists('..\packages\Fody.1.29.3\build\portable-net+sl+win+wpa+wp\Fody.targets')" />

La solución más sencilla es actualizar a una versión posterior del Gestor de Paquetes NuGet. Si esto no funciona, es posible que haya un problema con Fody y Microsoft.Bcl.Build.targets. Eliminar la siguiente línea del archivo .csproj podría ser útil:

<Import Project="..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets"
Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />

Dentro del método WriteAsync(), buscamos un objeto SynchronizationContext.Current distinto de nulo para determinar si el código se ejecuta en el hilo de la interfaz de usuario. Esta comprobación puede ser inexacta si se ha definido Current en los hilos de trabajo. Si se ha definido SynchronizationContext.Current en un hilo de trabajo, se llama al método Write() en lugar de WriteAsync().

Para obtener más información, consulte Escrituras asincrónicas.

Es posible que vea un System.NotSupportedException con el mensaje "AddDefaultTypes debe llamarse antes de crear una instancia de Realm". Esto puede ocurrir si tiene varios proyectos que contienen modelos de Realm y abre una instancia de Realm antes de que todos se hayan cargado en memoria.

.NET utiliza la carga diferida para mejorar el rendimiento. Un ensamblado no se carga hasta que se necesita uno o más de los tipos que contiene. Sin embargo, Realm depende del inicializador del módulo para registrar todos los tipos en su esquema predeterminado. Al abrir un realm por primera vez, el esquema predeterminado se bloquea y cualquier intento de registrar más tipos generará la excepción mencionada.

Hay 3 formas de resolver este problema:

  1. Puedes colocar tus modelos de reino en el mismo ensamblaje donde llamas a Realm.GetInstance.

  2. Puede precargar el ensamblaje que contiene los objetos de su reino creando un método estático en el ensamblaje y luego llamar a ese método desde el código de su aplicación:

    // In your models assembly
    public static class MyAssemblyLoader
    {
    public static void LoadMe() {}
    }
    // In your app
    public void Initialize()
    {
    MyAssemblyLoader.LoadMe();
    }
  3. Puede especificar explícitamente el esquema del reino al inicializar el reino:

    var config = new RealmConfiguration
    {
    Schema = new[] { typeof(Person), typeof(Company), ... }
    }

En dispositivos iOS o iPad con poca memoria disponible, o donde tienes una aplicación que consume mucha memoria y utiliza varios reinos o muchas notificaciones, es posible que encuentres el siguiente error:

libc++abi: terminating due to an uncaught exception of type std::bad_alloc: std::bad_alloc

Este error generalmente indica que no se puede asignar un recurso porque no hay suficiente memoria disponible.

Si está compilando para iOS 15+ o iPad 15+, puede agregar el derecho de direccionamiento virtual extendido para resolver este problema.

Agregue estas claves a su lista de propiedades y establezca los valores en true:

<key>com.apple.developer.kernel.extended-virtual-addressing</key>
<true/>
<key>com.apple.developer.kernel.increased-memory-limit</key>
<true/>

Volver

Compatibilidad

En esta página