ios - Linq 方法 Release模式中的 MonoTouch JIT 错误

标签 ios linq mono xamarin.ios aot

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

Attempting to JIT compile method 'System.Linq.OrderedEnumerable`1:GetEnumerator()' while running with --aot-only.

产生这个错误的代码是

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

此错误不会发生在 Release|Debug 配置的模拟器中,或 Debug 配置的设备上。我在 SO here 上看到过几个类似的话题和 here ,但我不确定我是否理解它们在这个特定问题上如何适用于我。

最佳答案

这可能是一些事情。

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

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

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

关于ios - Linq 方法 Release模式中的 MonoTouch JIT 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8187990/

相关文章:

ios - 非消耗品应用内购买收据验证是否可选?

C# 林奇 : How is string ("[1, 2, 3]") parsed as an array?

c# - BouncyCaSTLe 未定义长度 ASN1

c# - 无法查询 EF 对象上名为 "group"的属性

c# - LINQ:使用 AND 序列构建动态过滤器

c# - "ASP.NET 4.5 Async Pipeline"是什么意思?

c - 在osx上查找变量的虚拟内存地址

iphone - UITextField - 返回 BOOL 的代表崩溃

javascript - 安全错误(DOM 异常 18): The operation is insecure WKWebkit iOS 10

ios - 请解释 Always Embed Swift 标准库的目的