【发布时间】:2012-04-26 06:34:34
【问题描述】:
我有一个奇怪的问题,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 继承的方法。反射显示myClass.GetType().GetMembers() 有一个 MemberInfo 可以满足我的所有期望。然而,仅适用于 Release|iPhone,我无法访问这些方法或属性。我能得出的唯一合乎逻辑的结论是 aot 编译步骤缺少它们,我根本不知道为什么会发生这种情况,更不用说仅在 Release 配置中。
我的问题是,什么可能会导致这种情况,以及修复它的下一步是什么?我什至不知道从哪里开始调试这个,或者提交一个关于什么的错误,因为我无法在我们(很多)更大的项目的上下文中重现它。
更新:请求了确切的异常文本。
System.ExecutionException: Attempting to JIT compile method
'MyNamespace.MyClass.get_NavController ()' while running with --aot-only
【问题讨论】:
-
你能解释一下“NavController”应该是什么吗?它不是一种方法(没有括号),也不是“getter”(不是获取或设置)。这可能是整个问题吗?
-
是的,它是一个带有 getter 的属性。我已经更新了代码以修复我的遗漏。
标签: c# xamarin.ios jit aot