iOS-версия приложения работает только на iPhone XS Max 12.1 Simulator - PullRequest
0 голосов
/ 11 февраля 2019

Я использую Visual Studio для Mac.

Когда я создаю и запускаю свое приложение на симуляторе iPhone, оно работает только на симуляторе iPhone XS Max.

Любое другое симулируемое устройство(от XS Max до iPhone 6) покажет экран-заставку, но затем появится

Foundation.MonoTouchexception...NSInternalInconsistencyException Reason: Application windows are expected to have a root view controller at the end of the application launch

Единственное физическое устройство, с которым я должен протестировать, это iPhone 6S Plus, но выдает то же исключение.

Я попытался очистить и восстановить, удалив папки bin и obj.

Я проверил журнал устройства, но пока ничего не нашелпривести меня к решению (если вам нужны журналы, которые я, безусловно, могу предоставить).

Любые идеи о том, что может вызвать эту специфическую проблему или что нужно отслеживать в журналах устройств, которые могут помочь привести кresolutoin

1 Ответ

0 голосов
/ 14 февраля 2019

Эта проблема была вызвана моим tokenExpiration на моей странице App.xaml.

В какой-то момент, когда я тестировал свое приложение на iPhone XS Max 12.1, строка была сохранена где-то еще, так что, когда приложениеинициализирует эту строку не пустой, поэтому var tokenDate = Convert.ToDateTime(tokenExpiration); не будет выдавать ошибку.

Тогда мой оператор if может быть успешно выполнен, и у моего приложения будет базовое представление корня.

Однако для нового симулятора, который я раньше не использовал и не установилtokenExpiration строка раньше, когда вы захотите получить эту tokenExpiration, она вернет пустую строку в качестве настройки по умолчанию.

Тогда var tokenDate = Convert.ToDateTime(tokenExpiration); выдаст ошибку, так как не может преобразовать пустую строку.

Наконец, мой код будет выполняться в моем операторе catch, что означает, что мое приложение теряет базовое корневое представление, и именно это вызывает мою проблему.

Предыдущий код:

    try
    {
        TaskScheduler.UnobservedTaskException += (sender, e) => {
            Console.WriteLine(e.Exception.ToString(), Category.Exception, Priority.High);
        };



        await NavigationService.NavigateAsync("/LoginPage");

    }
    catch (Exception e)
    {
        Console.WriteLine(e.ToString(), Category.Exception, Priority.High);
    }

Обновленный код:

    var tokenExpiration = Preferences.Get("facebookTokenExpiration", string.Empty);
    if (tokenExpiration != null && tokenExpiration.Length > 0)
    {
        var tokenDate = Convert.ToDateTime(tokenExpiration);
        var tokenStatus = DateTime.Now.CompareTo(tokenDate);
        //Token is still active
        if (tokenExpiration != string.Empty & tokenStatus < 0)
        {

            await NavigationService.NavigateAsync("/MainTabbedPage?selectedTab=PuppyDetailsPage");

        }
        else
        {
            await NavigationService.NavigateAsync("/Login");
        }
    }
    else
    {
        await NavigationService.NavigateAsync("/MainTabbedPage?selectedTab=PuppyDetailsPage");
    }

Редактировать: Спасибо @LandLu forums.xamarin.com за помощь в решении этой проблемы.

...