MonoTouch がメソッドをコンパイルしていないか、呼び出すように指示されたコンパイル済みメソッドを見つけることができないように見えるという奇妙な問題があり、リリース構成のデバイスでのみ - デバッグ ビルドは問題ありません。運が悪いので、より単純なコード サンプルで再現しようとしましたが、以下のコードで動作を確認できるとは思えません。しかし、これは本質的に私がやっていることです:
using System;
using MonoTouch.UIKit;
public class MyClass
{
private UINavigationController _navController;
private UIViewControler _viewController;
public UINavigationController NavController
{
get
{
if (_navController == null)
{
if (_viewController == null)
{
_viewController = new UIViewController();
}
_navController = new UINavigationController(_viewController);
}
return _navController;
}
}
}
その後、別の方法で...
public void SomeMethod()
{
MyClass myClass = new MyClass();
var navController = myClass.NavController; // <-- This is where it throws
}
私が受け取る例外は、get_NavController() を JIT しようとしたことを示す標準の JIT コンパイル メッセージです。仮想ジェネリックもLINQも存在せず、リンカがオフになっていて、通常JITを引き起こす他のものが関与していないように見えるため、これは非常に奇妙です。また、MyClass で定義された他のメソッドとプロパティに対してスローされることも確認しましたが、コンストラクターまたはSystem.Object
継承されたメソッドではスローされません。リフレクションは、myClass.GetType().GetMembers()
私が期待するすべての MemberInfo を持っていることを明らかにします。ただし、Release|iPhoneの場合のみ、これらのメソッドまたはプロパティにアクセスできません。私が到達できる唯一の論理的結論は、aot コンパイル ステップでそれらが欠落しているということであり、Release 構成だけでなく、なぜそれが起こるのかまったくわかりません。
私の質問は、何がそのような状況を引き起こしている可能性があり、それを修正するための次のステップは何ですか? これをデバッグするためにここからどこに行くべきか、または何についてバグを報告するべきかさえわかりません。これは、(はるかに) 大規模なプロジェクトのコンテキストからは再現できないためです。
更新:正確な例外テキストが要求されました。
System.ExecutionException: Attempting to JIT compile method
'MyNamespace.MyClass.get_NavController ()' while running with --aot-only