3 Stimmen

MonoTouch JIT-Fehler im Freigabemodus bei der Linq-Methode

Ich habe derzeit einige Code wie unten gezeigt, die Linq verwendet, um einige IEnumerables für mich zu organisieren. Beim Ausführen dieses Codes auf dem Gerät im Freigabemodus (iOS 5.0.1, MonoTouch 5.0.1, Mono 2.10.6.1) erhalte ich die Ausnahme

Versuch der JIT-Kompilierung der Methode 'System.Linq.OrderedEnumerable`1:GetEnumerator()' bei Ausführung mit --aot-only.

Der Code, der diesen Fehler erzeugt, lautet

// List<IncidentDocument> documents is passed in
List<LibraryTableViewItemGroup> groups = new List<LibraryTableViewItemGroup>();
List<DocumentObjectType> categories = documents.Select(d=>d.Type).Distinct().OrderBy(s=>s.ToString()).ToList();
foreach(DocumentObjectType cat in categories)
{
    List<IncidentDocument> catDocs = documents.Where(d => d.Type == cat).OrderBy(d => d.Name).ToList();
    List<LibraryTableViewItem> catDocsTableItems = catDocs.ConvertAll(d => { return new LibraryTableViewItem{ Image = GetImageForDocument(d.Type), Title = d.Name, SubTitle = d.Description}; });
    LibraryTableViewItemGroup catGroup = new LibraryTableViewItemGroup{ Name = GetCatName(cat), Footer = null, Items = catDocsTableItems };
    groups.Add (catGroup);
}           

Dieser Fehler tritt weder im Simulator bei Release|Debug-Konfigurationen noch auf dem Gerät bei der Debug-Konfiguration auf. Ich habe ein paar ähnliche Threads auf SO gesehen aquí y aquí aber ich bin mir nicht sicher, ob ich verstehe, wie sie in diesem speziellen Fall auf mich zutreffen.

3voto

poupou Punkte 43207

Das kann verschiedene Ursachen haben.

  • Es gibt einige Einschränkungen bei Verwendung von vollständig AOT, um iOS-Anwendungen zu erstellen, d. h. um sicherzustellen, dass nichts zur Laufzeit gejittet wird (eine Apple-Beschränkung). Jeder ist anders, auch wenn die Meldung identisch aussieht (d.h. viele Ursachen führen dazu). In der Regel gibt es jedoch einfache Abhilfen, die wir vorschlagen können;

  • Es könnte sich auch um eine (bekannte) Regression in 5.0.1 handeln (die in 5.0.2 behoben ist). Dies führte zu einigen zusätzlichen AOT-Fehlern, die normalerweise keine Probleme sind (oder bereits behobene Probleme).

Ich schlage vor, dass Sie auf MonoTouch 5.0.2 aktualisieren, um zu sehen, ob Ihre Anwendung korrekt kompiliert wird. Wenn nicht, dann füllen Sie bitte einen Fehlerbericht auf http;//bugzilla.xamarin.com aus und fügen Sie einen kleinen, in sich geschlossenen Testfall hinzu, um das Problem zu duplizieren (der obige ist nicht vollständig genug). Es scheint ein interessanter Testfall, wenn es funktioniert, wenn das Debugging aktiviert ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X