Ошибка IsolatedStorageSettings и NavigationService

Поэтому я сделал перерыв и перешел с C# на VB при разработке приложений для Windows Phone 8. Это скорее тест, и у меня действительно странная проблема.

Прежде всего, мой основной сценарий заключается в том, что у меня есть страница A и страница B. Пользователь должен заполнить несколько деталей, прежде чем перейти на страницу B. Страница B будет отображаться только в том случае, если пользователь уже заполнил информацию на странице A, что-то вроде первого запуска.

Что я сделал, так это то, что я добавил этот код:

Private Sub createbtn_Click(sender As Object, e As RoutedEventArgs) Handles createbtn.Click
    '...
    IsoSettings.Add("AccountCreated", Nothing)
    NavigationService.Navigate(New Uri("/MainMenu.xaml", UriKind.Relative))
    NavigationService.RemoveBackEntry()
End Sub

После того, как пользователь нажмет кнопку «Создать учетную запись». Он будет перенаправлен на страницу B, и в дальнейшем пользователю не нужно будет заполнять информацию на странице A. «AccountCreated» — это своего рода проверка. Здесь:

Protected Overrides Sub OnNavigatedTo(e As NavigationEventArgs)        
    If IsoSettings.Contains("AccountCreated") Then            
        NavigationService.Navigate(New Uri("/MainMenu.xaml", UriKind.Relative)) 'Page B
        NavigationService.RemoveBackEntry()          
    Else
        NavigationService.Navigate(New Uri("/MainPage.xaml", UriKind.Relative)) 'Page A
    End If
End Sub

Таким образом, в основном это проверяет и видит, содержит ли IsoSettings «AccountCreated», а затем переводит пользователя на страницу B, если не переводит его на страницу A. Теперь этот способ работает нормально. Нет проблем. Работает так, как я хочу.

Теперь я добавил страницу настроек. Существует одна настройка, в которой пользователь может решить, показывать страницу входа или нет. Если он «выключен», то, очевидно, он не будет отображаться, а «Вкл.» …

Я добавил это:

If IsoSettings.Contains("AccountCreated") Then
        Try
            Dim ShowLoginPage As Byte = CByte(AppSettings("StartupLogin"))
            If ShowLoginPage = 0 Then
                NavigationService.Navigate(New Uri("/LoginPage.xaml", UriKind.Relative))
                NavigationService.RemoveBackEntry()
            ElseIf ShowLoginPage = 1 Then
                NavigationService.Navigate(New Uri("/MainMenu.xaml", UriKind.Relative))
                NavigationService.RemoveBackEntry()
            End If
        Catch ex As KeyNotFoundException
            AppSettings.Add("StartupLogin", 0)
        End Try
    Else
        NavigationService.Navigate(New Uri("/MainPage.xaml", UriKind.Relative))
End If

Теперь здесь возникает проблема. Поэтому, когда пользователь впервые запускает это приложение. Он должен пройти через страницу А. Он заполняет информацию, а затем переходит на страницу входа. Теперь, когда пользователь входит в систему или просто закрывает приложение на странице входа и повторно открывает его, пользователи переходят на страницу A, чтобы исправить это, пользователь должен закрыть приложение и снова открыть его.

Может ли кто-нибудь прояснить для меня некоторые вещи? Спасибо!


person Ahmed.C    schedule 17.03.2014    source источник


Ответы (1)


Я не уверен, правильно ли я понял и что в остальной части кода, но из предоставленного для меня получается, что:

  • при первом запуске вашего приложения. строка Dim ShowLoginPage As Byte = CByte(AppSettings("StartupLogin")) выдает исключения - в AppSettings нет StartupLigin, поэтому он добавляет его, но навигация следует по мере обработки исключения.
  • во второй раз StartupLigin существует, поэтому он проходит через операторы if

Я думаю, подойдет, если вы проверили первый запуск в Application_Launching() в App.xaml.cs.

Я также не вижу, где вы сохраняете свои AppSettings - если вы хотите, чтобы ваши данные были сохранены, вы должны это сделать.

person Romasz    schedule 17.03.2014
comment
Спасибо за это. Извините, если вы этого не поняли, но да, вы подали мне идею. Что я сделал, так это добавил AppSettings.Add("StartupLogin", 0) в Application_Launching, и все заработало нормально. Молодец! - person Ahmed.C; 17.03.2014
comment
@ Ahmed.C Конечно, вы должны сначала проверить, существует ли уже StartupLogin и так далее, но вы, вероятно, знаете об этом. Удачи и счастливого кодирования. - person Romasz; 17.03.2014
comment
Ага. Я на самом деле делаю это. Я не понимал, что размещение кода при запуске приложения будет работать так, как я намеревался. Он продолжает добавлять его независимо от стоимости. Мне нужно найти обходной путь сейчас. Надеюсь, это не займет слишком много времени. - person Ahmed.C; 17.03.2014
comment
@ Ahmed.C Я не уверен, какой обходной путь вы ищете - обычно вы должны проверить, существует ли ключ в AppSettings, если нет, добавьте его, иначе измените. В зависимости, например, от логического значения вы можете проверить, ввел ли пользователь некоторую информацию или нет. Не забудьте выполнить AppSetting.Save(), чтобы сохранить данные между отдельными запусками приложения. - person Romasz; 17.03.2014
comment
Мне удалось заставить его работать сейчас: D Это было просто. Спасибо, в любом случае. - person Ahmed.C; 17.03.2014