Resolve a 'No Properties in Class' Exception
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 para esta excepción:
No tienes objetos RealmObject entretejidos, probablemente porque algo falló con Fody. En ese caso,
RealmSchemagenera una excepción. Consulta Excepciones de Fody Weave para obtener detalles sobre cómo solucionar este problema.Un enlazador ha eliminado propiedades de uno o más RealmObjects, y Realm considera que esas propiedades no existen. Esto puede ocurrir si su comportamiento del enlazador...Se
Link all assembliesha establecido en, pero no se ha usado el[Preserve(AllMembers = true)]atributo en la declaración de clase. El enlazador solo conserva los miembros de clase a los que se ha hecho referencia explícitamente en el código o marcados con el[Preserve(AllMembers = true)]atributo. Esto significa que, si se desea conservar una propiedad en realm y no se hace referencia a ella en ningún punto del código, el enlazador podría eliminarla, lo que provocaría una discrepancia en el esquema.Estás usando una herramienta de ofuscación de código que interfiere con la detección de nombres de modelo. Realm se basa en los nombres de clase para generar el esquema, por lo que si una herramienta de ofuscación de código ha ocultado esos nombres de clase, la generación del esquema falla. Para solucionar esto, configura tu herramienta de ofuscación de código para que ignore las clases de tu modelo.
Fody: 'An Unhandled Exception Occurred'
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.
Fody Weave Exceptions
You may see a warning in the build log about classes not having been woven. This indicates that the Fody weaving package is not properly installed. Here are some things to check:
First, check that the
FodyWeavers.xmlfile contains an entry for Realm.También es posible que la instalación de Fody haya fallado. Los usuarios han experimentado esto con Visual Studio 2015 y versiones de NuGet administrador de paquetes anteriores a la versión 3.2. Para diagnosticar esto, utiliza un editor de texto para comprobar que tu
.csprojtenga una línea que importeFody.targets, como:<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')" />
The easiest fix is to upgrade to a later version of NuGet Package Manager. If this doesn't work, there may be a problem with Fody and Microsoft.Bcl.Build.targets. Removing the following line from your .csproj file might help:
<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')" />
Solución de problemas de WriteAsync
Inside the WriteAsync() method, we check for a non-null SynchronizationContext.Current object to determine if the code executes on the UI thread. This check may be inaccurate if you have set Current in your worker threads. If you have set SynchronizationContext.Current in a worker thread, call the Write() method instead of WriteAsync().
For more information, see Asynchronous Writes.
Resolviendo una excepción 'AddDefaultTypes debe llamarse antes de crear una instancia Realm'
Puede que veas un System.NotSupportedException con el mensaje "AddDefaultTypes debe llamarse antes de crear una instancia Realm". Esto puede ocurrir cuando se tienen múltiples Proyectos que contienen modelos de Realm y se abre una instancia Realm antes de que todos hayan sido cargados en memoria.
Explicación de la causa
.NET uses lazy loading to improve performance. An assembly is not loaded until one or more of the types it contains is needed. However, Realm relies on the module initializer to register all of the types in its default schema. When you first open a realm, the default schema gets locked, and any attempt to register more types will result in the exception above.
Resolución
There are 3 ways to resolve this issue:
Puedes colocar tus modelos de realm en el mismo conjunto donde llamas a
Realm.GetInstance.Puedes precargar el ensamblado que contiene tus objetos Realm creando un método estático en el ensamblado, y luego llamando a ese método desde el código de tu aplicación:
// In your models assembly public static class MyAssemblyLoader { public static void LoadMe() {} } // In your app public void Initialize() { MyAssemblyLoader.LoadMe(); } You can explicitly specify the Realm schema when initializing the realm:
var config = new RealmConfiguration { Schema = new[] { typeof(Person), typeof(Company), ... } }
iOS/iPad OS Bad Alloc/Not Enough Memory Available
In iOS or iPad devices with little available memory, or where you have a memory-intensive application that uses multiple realms or many notifications, you may encounter the following error:
libc++abi: terminating due to an uncaught exception of type std::bad_alloc: std::bad_alloc
Este error normalmente indica que un recurso no se puede asignar porque no hay suficiente memoria disponible.
If you are building for iOS 15+ or iPad 15+, you can add the Extended Virtual Addressing Entitlement to resolve this issue.
Add these keys to your Property List, and set the values to true:
<key>com.apple.developer.kernel.extended-virtual-addressing</key> <true/> <key>com.apple.developer.kernel.increased-memory-limit</key> <true/>