私はMonoTouchがメソッドをコンパイルしていないか、呼び出されるようにコンパイルされたメソッドを見つけられないようだが、Releaseコンフィグレーションのデバイスのビルドでのみ問題がある。私は運がないより単純なコードサンプルでそれを再現しようとしました。だから、以下のコードでその動作を見ることはできません。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
}
私が手に例外をされている標準のJITコンパイルメッセージを、それがJITにしようとしたことを言って:しかし、これは私がやっている本質的ですget_NavController()。仮想ジェネリックス、LINQ、リンカーがオフで、通常はJITを引き起こすものは何も関与していないため、これは非常に奇妙です。私はまた、MyClassで定義された他のメソッドやプロパティに対してはコンストラクタやSystem.Object
の継承されたメソッドではスローされないことを確認しました。 Reflectionは、myClass.GetType().GetMembers()
には私が期待するすべてのもののMemberInfoがあることが明らかになりました。ただし、の場合、これらのメソッドまたはプロパティにアクセスすることはできません。リリース| iPhoneの場合のみです。私が来ることができる唯一の論理的な結論は、aotコンパイルのステップではそれらが欠けているということです。なぜそれが起こるのかわかりません。リリースの設定だけではありません。
私の質問は、このような状況を引き起こす原因となる可能性があり、それを修正するための次のステップは何ですか?私は、私たちの(もっと)大規模なプロジェクトの文脈からそれを再現することができないので、これをデバッグする際にここからどこに行くのか、あるいはバグを何に書き込むのかについては不明です。
更新:正確な例外テキストが要求されました。
System.ExecutionException: Attempting to JIT compile method
'MyNamespace.MyClass.get_NavController()' while running with --aot-only
"NavController"の役割について説明できますか?それは方法ではなく(括弧なし)、どちらもゲッターではありません。それはすべての問題になるでしょうか? – Krumelur
はい、それはゲッターを持つプロパティです。私は私の省略を修正するコードを更新しました。 –