C# MonoTouch神秘地不是aot编译方法和属性吗?

C# MonoTouch神秘地不是aot编译方法和属性吗?,c#,xamarin.ios,jit,aot,C#,Xamarin.ios,Jit,Aot,我遇到了一个奇怪的问题,MonoTouch似乎不是编译方法,就是找不到它被指示调用的编译方法,而且只有在版本配置中的设备上才可以-调试构建就可以了。我尝试用一个更简单的代码示例复制它,但运气不佳,因此我怀疑您能否看到下面代码的行为。但这基本上就是我在做的: using System; using MonoTouch.UIKit; public class MyClass { private UINavigationController _navController; priva

我遇到了一个奇怪的问题,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
}

这看起来不像是可以在这里解决的问题


我建议您提交一个bug,如果您无法生成更小的测试用例,请附加整个项目。如果您不希望项目公开可见,您可以提交只有Xamarin员工有权访问的私人bug。

您可以尝试显式声明变量吗

UINavigationController navController = myClass.NavController;
或者,我想知道这是否与需要等待调用UIViewController.ViewDidLoad方法有关,因为类的内部可能尚未初始化


我想不出你的代码不起作用的原因。

我无权附加我们的全部源代码,但我会将错误归档并附加二进制文件。我们已查明原因。MonoDevelop在引用也是iOS应用程序的程序集时存在一个bug。它为编译器提供应用程序包中剥离程序集的路径,而不是普通编译的exe。Link:在实际代码中,属性作为参数传递给函数,但无论我如何使用它,它都会抛出。所有代码都与视图无关,只与控制器有关,而且在过去它一直有效;我仍然在追踪它到底是什么时候坏的。对我来说,这也表明有齿轮在移动,上面给出的代码可能不是真正的罪魁祸首,可能与运行时的其他东西有关。您是否擅长使用反射调用该方法?老实说,我想不出上面的代码不起作用的任何其他原因,除了它没有在任何地方被显式引用,因此iOS编译器正在删除代码,因为它没有被引用以创建尽可能小的可执行文件。如问题中所述,该属性不是通过反射调用的。您能解释一下吗“NavController”应该是?它不是一个方法(没有偏执),也不是一个“getter”(不是get或set)。这可能是全部问题吗?是的,它是一个带有getter的属性。我已经更新了代码以修复我的遗漏。
UINavigationController navController = myClass.NavController;