6

私は次の方法を持っています:

ApiResponse<T> PostMultipart<T>(string uploadUrl, NameValueCollection formParamters, params UploadFile[] uploadFiles);

UploadFileは単なるPocoです:

public class UploadFile
{
    public string FilePath { get; set; }
    public string ContentType { get; set; }
    public string ParameterName { get; set; }
}

このメソッドを呼び出すことで、「Debug | iPhoneSimulator」を使用したシミュレーターと、「Release|iPhone」を使用したiOS5.1.1を搭載したiPodTouchですべてが正常に機能します。

しかし、デバイスでアプリのデバッグを開始すると( "Debug | iPhone")、次の例外が発生します。

System.ExecutionEngineException:--aot-onlyで実行中に、メソッド'Xyz.Api.ApiClient:PostMultipart(string、System.Collections.Specialized.NameValueCollection、Xyz.Api.UploadFile [])'をJITコンパイルしようとしています。詳細については、 http://docs.xamarin.com/ios/about/limitationsを参照してください。

リンク先のページに関連情報が表示されません。そして、なぜその動作が電話でデバッグするときにのみ発生するのか、私にはよくわかりません。

他の誰かがここで何が起こっているのか理解できますか?:)

4

1 に答える 1

6

コードサンプルは(複製するのに)十分に完全ではありませんが、これはおそらく<T>型(intenum ...など)であるためです。

AOTコンパイラでは、コードを共有できない値型のコードを生成するのが困難です(他の参照型の場合と同様)。回避策は次のとおりです。

  • AOTコンパイラに必要なものを示唆<T>します(使用している値の型について既知であり、コードが生成されていることを確認します)。

  • 値型(例:)stringの代わりに参照型(例:)を使用するint

そして、なぜその動作が電話でデバッグするときにのみ発生するのか、私にはよくわかりません。

iOSデバイスはJITtingコード(Appleの制限)を許可しないため、AOTが使用されます。iOSシミュレーターにはこの制限がないため、JITが使用されます(AOTingコードよりもはるかに高速であるため)

于 2012-10-11T13:02:14.313 に答える