簡體   English   中英

List 的動態數據類型導致應用程序崩潰

[英]dynamic datatype for List cause app crash

我在 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 異常。 Name: NSInvalidArgumentException Reason: *** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[0] Native stack trace: 0 CoreFoundation 0x00007fff23c7127e __exceptionPreprocess + 350 1 libobjc.A.dylib 0x00007fff513fbb20 objc_exception_throw + 48 2 CoreFoundation 0x00007fff23d03ab1 _CFThrowFormattedException + 194 3 CoreFoundation 0x00007fff23d06cc6 -[__NSPlaceholderArray initWithObjects:count:].cold.3 + 38 4 CoreFoundation 0x00007fff23c4a1c4 -[__NSPlaceholderArray initWithObjects:count:] + 164 5 CoreFoundation 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.Z1BDF605991920DB11CBDF8508204C4EB Z 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_msgS 0x0000000108d10a0a 0x0 + 4442884618

Xamarin 不支持dynamic .

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

例如,iOS 要求其應用程序提前 (AOT) 編譯; 在運行時無法生成代碼。 這是 Apple 的一項安全要求,以防止應用程序在運行時在您的手機上生成惡意代碼。

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

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM