Intereting Posts
Неправильная розетка Предупреждение: «libsystem_network» содержит сценарий отладки Как добавить кнопку в уведомление Apple WatchKit Long Look Что произойдет с моими существующими приложениями iOS с помощью Parse PushService после отключения сервера анализа? Форматировщик NsDate, дающий неправильную дату из строки iOS – Написание тестов данных ядра в Swift iOS IAP получает только самую новую квитанцию? (iOS) Переход обходит инициализацию сохраняющей переменной при использовании goto изображения из асинхронных документов Из Имгур в Машапе – Оут Невозможно обновить UIButton.image после просмотра загрузок Покрытие NSInputStream и NSOutputStream для System.IO.Stream – Xamarin.iOS (MonoTouch) CGAffineTransform возвращается при нажатии другого контроллера Приложение MonoTouch не может создавать / развертывать на устройстве iphone, но отлично работает на iSimulator Доступ к папке / Apps / для разработчиков iOS

MvxViewModelRequest имеет значение null в ViewDidLoad

Я использую MvvmCross 3.0.12 в проекте iPad. В настоящее время я получаю NPE в MvxViewControllerExtensionMethods.LoadViewModel, потому что touchView.Request имеет значение null. Это происходит только в контроллере представления, который наследуется от MvxTableViewController; просматривать контроллеры, наследующие от нагрузки MvxViewController, и отображать их просто отлично.

Я установил точку останова в MvxTouchViewsContainer.CreateView -> MyTableViewController.Ctor -> MvxBaseTouchViewPresenter.Show -> MyTableViewController.LoadView; которые все ссылаются на один и тот же экземпляр класса. Затем, когда я попал в точку останова в ViewDidLoad, его новый экземпляр и все свойства, включая Request, равны null.

Это ошибка с Xamarin.iOS или я делаю что-то неправильно?

Это иногда случается для контроллеров представлений, таких как таблица, панель вкладок и коллекция.

Это вызвано, я думаю, чем-то в базовом классе Objective C init ссылающимся на View и тем самым запускает ViewDidLoad до того, как конструкция C # будет полностью завершена. Это немного похоже на то, что может произойти в «чистом» c #, если конструктор базового класса ссылается на виртуальный метод.

Чтобы проверить, что это происходит для вашего приложения, поместите 2 точки останова в ваше приложение: одно в конструкторе ViewController и другое в ViewDidLoad – если сначала открывается ViewDidLoad, тогда вы знаете, что это так.

Единственный путь, который я нашел, – это создать код вокруг этого, вызвав второй вызов ViewDidLoad в конструкторе.

  public FirstView() { // need this additional call to ViewDidLoad because UIkit creates the view before the C# hierarchy has been constructed ViewDidLoad(); } public override void ViewDidLoad() { base.ViewDidLoad(); if (ViewModel == null) return; // ... 

Если это помогает: