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”的 iOS 5.1.1 的 iPod Touch 上一切正常。

但是,当我开始在设备上调试应用程序(“Debug|iPhone”)时,出现以下异常:

System.ExecutionEngineException:在使用 --aot-only 运行时尝试 JIT 编译方法“Xyz.Api.ApiClient:PostMultipart (string,System.Collections.Specialized.NameValueCollection,Xyz.Api.UploadFile[])”。有关详细信息,请参阅http://docs.xamarin.com/ios/about/limitations

我在链接页面上看不到任何相关信息。而且我真的不明白为什么这种行为只在手机上调试时才会发生。

其他人能够理解这里发生了什么吗?:)

4

1 回答 1

6

您的代码示例不够完整(无法复制),但这很可能是因为您<T>是值类型(例如int,枚举...)。

AOT 编译器难以为无法共享代码的值类型生成代码(就像它可以用于任何引用类型一样)。解决方法包括:

  • 提示AOT 编译器您需要什么(确保<T>已知并为您正在使用的值类型生成代码);

  • 使用引用类型(例如 a string)而不是值类型(例如 an int

而且我真的不明白为什么这种行为只在手机上调试时才会发生。

iOS 设备不允许 JITting 代码(Apple 的限制),因此使用 AOT。iOS模拟器没有这个限制,所以使用JIT(因为它比AOTing代码快很多)。

于 2012-10-11T13:02:14.313 回答