带有 MvvmCross 的 Xamarin.Android 上的 System.InvalidCastException
Posted
技术标签:
【中文标题】带有 MvvmCross 的 Xamarin.Android 上的 System.InvalidCastException【英文标题】:System.InvalidCastException on Xamarin.Android with MvvmCross 【发布时间】:2017-07-10 04:59:35 【问题描述】:我的 android 应用在生产环境中崩溃,我们的崩溃报告工具是 XamarinInsights,它会转储以下堆栈
at (wrapper castclass) System.Object:__castclass_with_cache (object,intptr,intptr)
在 MvvmCross.Droid.Support.V7.AppCompat.MvxAppCompatActivity1[TViewModel].get_ViewModel () [0x00006] in <76c7f3cdfddd459898d814608e83832e>:0
at AnyNameSpace.BaseActivity
1[TViewModel].get_Context () [0x00000] 在 :0
在 AnyNameSpace.BaseActivity`1[TViewModel].OnCreate (Android.OS.Bundle bundle) [0x00015] in :0
在 AnyNameSpace.ProfileView.OnCreate (Android.OS.Bundle 包) [0x00000] 在 :0
在 Android.Support.V4.App.FragmentActivity.n_OnCreate_Landroid_os_Bundle_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_savedInstanceState) [0x00011] 在 :0
在(包装器动态方法) System.Object:dd3ad951-7481-46d2-860d-a9601d351cd2 (intptr,intptr,intptr)
这是引发异常的位置
public class ProfileView : BaseAppActivity<ProfileViewModel>
protected override void OnCreate(Bundle bundle)
base.OnCreate(bundle);
SetContentView(Resource.Layout.ProfileView);
Title = string.Format("0 | 1", Title, Context.Version);
BaseAppActivity:BaseActivity
protected override void OnCreate(Bundle bundle)
SupportRequestWindowFeature((int)WindowFeatures.IndeterminateProgress);
base.OnCreate(bundle);
RegisterBaseViewReceiver();
if (Context != null)
Context.OnLoaded();
和BaseActivity
public class BaseActivity<TViewModel> : MvxAppCompatActivity<TViewModel>
where TViewModel : BaseViewModel
public TViewModel Context
get
return (TViewModel)base.ViewModel;
抛出异常
return (TViewModel)base.ViewModel;
但我无法在发布和调试配置中重现此崩溃,我只能在崩溃报告系统中看到此错误。有什么想法吗?
【问题讨论】:
仅供参考,GitHub Issues 上也对此问题进行了一些讨论。 【参考方案1】:这是 MvvmCross 中的 known bug,由从视图模型缓存中获取的无效模型引起。复制步骤在链接的 GitHub 问题中。
【讨论】:
以上是关于带有 MvvmCross 的 Xamarin.Android 上的 System.InvalidCastException的主要内容,如果未能解决你的问题,请参考以下文章
MvvmCross Xamarin Android 在初始屏幕上挂起并带有链接
如何使用带有 MvvmCross MvxTabsFragmentActivity 的 Android Xamarin 创建选项卡