xamarin.ios - mac - xamarin ios getting started
¿Cómo obligar a Monotouch AOT Compiler a ver un método genérico anidado? (1)
Hay algunas limitations genéricas en monotouch ahora. Creo que deberías revisar tu código a uno de ellos.
Tuve que saltar a través de aros, pero casi logré que ServiceStack
funcionara en iOS con Monotouch
en mi proyecto. Una excepción JIT
tiempo de ejecución es la espera:
System.ExecutionEngineException: Attempting to JIT compile method ''ServiceStack.Text.Json.JsonTypeSerializer:GetWriteFn<int> ()'' while running with --aot-only.
El código ofensivo es bastante simple:
internal WriteObjectDelegate GetWriteFn<T>()
{
return JsonWriter<T>.WriteFn();
}
Como prueba, modifiqué el código SS para hacer públicos los tipos y métodos internos e incluí lo siguiente en el código de inicio de mi proyecto (para que me llamen).
var ick = ServiceStack.Text.Json.JsonWriter<int>.WriteFn();
var erk = ServiceStack.Text.Json.JsonTypeSerializer.Instance.GetWriteFn<int>();
Esto todavía no alerta al AOT por alguna razón, ¡recibo la excepción cuando se ejecuta el código anterior! ¿Es esto porque el parámetro genérico es un tipo de valor? ¿O es porque estos son clases y métodos estáticos? ¿Cómo puedo forzar a Monotouch a AOT los métodos anteriores?
El código SS en cuestión se encuentra en JsonTypeSerializer.cs y JsonWriter.Generic.cs en: https://github.com/ServiceStack/ServiceStack.Text/tree/master/src/ServiceStack.Text/Json