List 的动态数据类型导致应用程序崩溃

如何解决List 的动态数据类型导致应用程序崩溃

我在 viewmodel 中有两个列表视图(普通列表和分组列表),在 UI 中我想使用一个列表视图。 所以我尝试使用动态数据类型进行运行时列表分配。

private dynamic commonList { get; set; }
public dynamic CommonList
{
    get
    {
        return commonList;
    }
    set
    {
        commonList = value;
            
    }
}

ItemsGrouped = new ObservableCollection<Grouping<string,ListItem>>(List);
commonList = new ExpandoObject();
commonList = ItemsGrouped;

这工作正常,但是当我尝试将另一个列表设置为相同的动态数据类型时,它会导致问题。

Items = new ObservableCollection<ListItem>(List);
commonList = new ExpandoObject();
commonList = Items;

此处应用因错误而崩溃:

dynamic_cast 错误 2:以下一个或多个 type_info 具有隐藏可见性或在多个翻译单元中定义。他们都应该有公众知名度。 N10__cxxabiv116__shim_type_infoE,id,N10__cxxabiv117__pbase_type_infoE。

抛出Objective-C异常。名称:NSinvalidargumentexception 原因:*** -[__NSPlaceholderArray initWithObjects:count:]:尝试从对象 [0] 中插入 nil 对象 本机堆栈跟踪: 0 核心基金会 0x00007fff23c7127e __exceptionPreprocess + 350 1 libobjc.A.dylib 0x00007fff513fbb20 ob​​jc_exception_throw + 48 2 核心基金会 0x00007fff23d03ab1 _CFThrowFormattedException + 194 3 CoreFoundation 0x00007fff23d06cc6 -[__NSPlaceholderArray initWithObjects:count:].cold.3 + 38 4 CoreFoundation 0x00007fff23c4a1c4 -[__NSPlaceholderArray initWithObjects:count:] + 164 5 核心基金会 0x00007fff23c5f6d4 +[NSArray arrayWithObjects:count:] + 52 6 CRMM.iOS 0x0000000100c4b280 xamarin_convert_managed_to_nsarray_with_func + 464 7 CRMM.iOS 0x0000000100c4da18 xamarin_managed_string_array_to_nsarray + 40 8 CRMM.iOS 0x0000000100c4dafc xamarin_managed_array_to_nsarray + 124 9 CRMM.iOS 0x0000000100c498be _ZL33xamarin_marshal_return_value_implP9_MonoTypePKcP10MonoObjectbP11_MonoMethodP17MethodDescriptionPj + 558 10 CRMM.iOS 0x0000000100c4963a xamarin_marshal_return_value + 106 11 CRMM.iOS 0x0000000100c595bb _ZL20marshal_return_valuePvPKcmS_P9_MonoTypebP11_MonoMethodP17MethodDescriptionPj + 1915 12 CRMM.iOS 0x0000000100c50fe0 xamarin_invoke_trampoline + 7984 13 CRMM.iOS 0x0000000100c58adb xamarin_arch_trampoline + 107 14 CRMM.iOS 0x0000000100c59ce2 xamarin_x86_64_common_trampoline + 118 15 UIKitCore 0x00007fff48257490 -[UITableView _updateIndexTitlesFromDataSource] + 149 16 UIKitCore 0x00007fff4825756f -[UITableView _updateIndex] + 165 17 CRMM.iOS 0x0000000100c59e69 xamarin_dyn_objc_msgSend + 217 18 ??? 0x0000000108d10a0a 0x0 + 4442884618

解决方法

Xamarin 不支持 dynamic

这不一定是 Xamarin 的限制,而是原生平台的限制。

例如,iOS 要求其应用程序进行 Ahead Of Time (AOT) 编译;无法在运行时生成代码。这是 Apple 的一项安全要求,旨在防止应用在运行时在您的手机上生成恶意代码。

以下是 Microsoft 官方文档以获取更多信息: https://docs.microsoft.com/xamarin/ios/internals/limitations#no-dynamic-code-generation

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?