0

我在使用 mtouch 时遇到了奇怪的行为;我知道 AOT 在特定情况下可能会失败,但我认为这个问题有点不同。

这是一些代码:

public class TTableCell
{
}

public class TTableElement<T>
    where T: TTableElement<T>
{
    public void SetProperty<TV> (ref TV backingStorage, string propName, TV value)
    {
        backingStorage = value;
    }
}

public class TAbstractTableItem<TC> : TTableElement<TAbstractTableItem<TC>>
    where TC : TTableCell
{
    public TAbstractTableItem ()
    {
    }

    string _string;
    bool _bool;

    public void DoException ()
    {
        SetProperty (ref _string, "String", "Bla bla");
        SetProperty (ref _bool, "Boolean", false);
    }
}

现在,如果在其他地方执行以下操作:

TTableItem<TTableCell> item = new TTableItem<TTableCell> ();
item.DoException ();

我得到了例外:

Unhandled managed exception: Attempting to JIT compile method 'TouchSandbox.TTableElement`1<TouchSandbox.TAbstractTableItem`1<TouchSandbox.TTableCell>>:SetProperty<bool> (bool&,string,bool)'

现在,请注意仅针对布尔版本的 引发异常SetProperty<T>,而不是字符串之一。在我的项目中,我使用了多种类型的方法(自定义类型),这个问题只发生在 bool 上。

有人可以帮我解决这个问题吗?

谢谢

塞尔吉奥

PS显然这个问题只存在于iDevice(不是模拟器)

更新

好的,在对 xamarin 的 bugzilla 进行了一些搜索后,我发现了一张票(实际上有点旧!),突出了 mtouch AOT 的不足:Bug 2096。可悲的是,他们似乎还没有修复!

4

1 回答 1

2

泛型类中的泛型方法似乎存在问题。

我还尝试了 6.3 beta 的测试用例(这可能会解决这个问题,因为很多事情都在这个领域有所改进),但它崩溃而不是抛出异常(错误提交- 你可以自己抄送以在它更新时进行更新固定的)。

于 2013-04-24T12:19:45.707 回答