3

我目前有一些代码如下所示,它们使用 Linq 为我组织一些 IEnumerables。在设备上以发布模式(iOS 5.0.1、MonoTouch 5.0.1、Mono 2.10.6.1)执行此代码时出现异常

在使用 --aot-only 运行时尝试 JIT 编译方法“System.Linq.OrderedEnumerable`1:GetEnumerator()”。

产生此错误的代码是

// 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);
}           

此错误不会发生在用于发布|调试配置的模拟器或用于调试配置的设备上。我在 SO herehere上看到了几个类似的线程,但我不确定我是否理解它们如何在这个特定问题上适用于我。

4

1 回答 1

3

这可能是几件事。

  • 使用完整的 AOT 构建 iOS 应用程序时有一些限制,即确保在运行时不会 JITted(Apple 限制)。即使消息看起来相同,每一个都是不同的(即许多原因会导致这种情况)。但是,我们通常可以为他们建议一些简单的解决方法;

  • 它也可能是 5.0.1 中的(已知)回归(在 5.0.2 中已修复)。这产生了一些额外的 AOT 故障,这些故障通常不是问题(或已经解决的问题)。

我建议您更新到 MonoTouch 5.0.2 以查看它是否可以正确编译您的应用程序。如果没有,请在 http;//bugzilla.xamarin.com 上填写错误报告,并包含一个小型、独立的测试用例来复制问题(以上内容不够完整)。如果它在启用调试时工作,这似乎是一个有趣的测试用例。

于 2011-11-19T17:03:56.900 回答