Недавно я обновился до Xamarin Studio, работающего под Windows. У меня есть простая реализация учебника TvCalculator mvvmcross, который отлично работает на Android и различных видах Windows. После того, как я модернизирована, Android приложений начали бросать NullReferenceExceptions в основной деятельности (ниже):Намерения в mvvmcross на Mono для Android
[Activity(Label = "TipCalculator.Android", MainLauncher = true, Icon = "@drawable/icon")]
public class TipCalculatorActivity : MvxBindingActivityView<TipCalculatorViewModel>
{
protected override void OnViewModelSet()
{
SetContentView(Resource.Layout.TipView);//Throws NullReferenceException
}
}
После выполнения некоторых копаться в коде mvvmcross, я нашел этот метод в классе MvxAndroidViewsContainer:
public virtual IMvxViewModel Load(Intent intent, Type viewModelTypeHint)
{
if (intent == null)
{
// TODO - some trace here would be nice...
return Activator.CreateInstance(viewModelTypeHint) as IMvxViewModel;
//return null;
}
if (intent.Action == Intent.ActionMain)
{
// TODO - some trace here would be nice...
return Activator.CreateInstance(viewModelTypeHint) as IMvxViewModel;
}
if (intent.Extras == null)
{
// TODO - some trace here would be nice...
return Activator.CreateInstance(viewModelTypeHint) as IMvxViewModel;
//return null;
}
IMvxViewModel mvxViewModel;
if (TryGetEmbeddedViewModel(intent, out mvxViewModel))
return mvxViewModel;
return CreateViewModelFromIntent(intent);
}
В исходном коде есть два случая, которые возвращают значение null. В каждом из них я заменил это вызовом Activator.CreateInstance().
Я не уверен, что является обоснованием первоначальной реализации, и я немного обеспокоен тем, что я что-то сломал. Может ли кто-нибудь пролить свет на то, почему есть случаи, когда этот метод возвращает null, и я сломал что-то фундаментальное в mvvmcross?
, что был «вопрос» что эти вещи решены? Для дроида я не вижу особых проблем - но я использую vs, а не xs, и я на ПК (это ваш код на mac?) – Stuart
, если вам нужно поговорить более общим «Мысли»? уровень затем msybe попробуйте переключиться на http://forums.xamarin.com/discussion/1549/pcls-and-mvvmcross-in-the-new-tools - stackoverflow отлично подходит для конкретных подробных q и точек. Но это не так хорошо для более общих обсуждений :) – Stuart
Извините! Должна быть более конкретной ... у моего исходного класса активности был только метод OnViewModelSet() с вызовом SetContentView. Это отлично работало в последней версии инструментария, но после того, как я обновил его, был обстрелян NullReferenceExceptpion. Я сделал кое-что и нашел ваше сообщение, указывающее, что метод Oncreate() поможет в определенных сценариях -> хотя сценарий не соответствует моему, я дал ему завихрение, что в конечном итоге привело меня к методу Load() в IMvxViewModel. Я продолжал получать исключение NullReferenceException до тех пор, пока не внес изменения в указанный выше метод. –