Intereting Posts
Работает ли APNS push-уведомления после удаления приложения из магазина приложений? Facebook iOS invitable_friends возвращает пустые данные Обновление пользовательского интерфейса из другого класса Как получить информацию о днях с помощью интеграции google в ios реверсирование фиксируется в git NSMutableAttributedString – NSForegroundColorAttributeName Использование автоматического макета для создания идеального квадрата Как установить UITextField в UINavigationBar sizeToFit? Пользовательская клавиатура iOS 8 с внешней клавиатурой Bluetooth Заполнение таблицы с категорией раздела Запрос FQL с v3.1 Facebook SDK для iOS для получения дня рождения и электронной почты Распознаватель жестов для мыши вниз и вверх в iPhone SDK NSManagedObjectContext возвращает nil в приложении Core Data (iOS) Отображение 3 разных видов с помощью UIPageControl Разница между кнопками клавиатуры iPad для кнопки «Готово» и «Минимизировать»

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; // ... 

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