0

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
4

2 に答える 2

1

これは、ここで解決できるものではないようです。

小さなテスト ケースを作成できない場合は、バグを報告し、プロジェクト全体を添付することをお勧めします。プロジェクトを公開したくない場合は、Xamarin の従業員のみがアクセスできるプライベート バグを報告できます。

于 2012-04-13T22:13:50.480 に答える
0

変数を明示的に宣言してみてください。

UINavigationController navController = myClass.NavController;

あるいは、クラスの内部がまだ初期化されていない可能性があるため、これは UIViewController.ViewDidLoad メソッドが呼び出されるのを待つ必要があることに関連しているのでしょうか?

ここで暗闇の中で撮影しただけで、コードが機能しない理由が思いつきません。

于 2012-04-16T17:25:16.230 に答える