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