Получение «PushAsync не поддерживается глобально на iOS …», в то время как ИСПОЛЬЗОВАНИЕ NavigationPage

Ello все, я продолжаю получать следующее:

System.InvalidOperationException с "PushAsync не поддерживается глобально на iOS, пожалуйста, используйте NavigationPage."

Даже несмотря на то, что я использую NavigationPage и правильно использую его из того, что я могу сказать. Мои навыки F # не удивительны, поэтому я определенно думаю, что я делаю что-то неправильно здесь, но, на удивление, нахожу примеры предварительной подготовки Navigation.PushAsync трудно найти в F #. Я нашел этот фрагмент кода и искал его для примера того, как выглядит это.

https://github.com/fsprojects/Tamarin/blob/master/samples/Todo/TodoListMvc.fs

В этом примере я вижу этот код, завернутый в async{}

  do! this.Navigation.PushAsync(page = downcast view.Root) |> Async.AwaitIAsyncResult |> Async.Ignore 

поэтому я не думаю, что я слишком далеко здесь. Сказав это, что я делаю неправильно?

AssemblyVersions

  • Версия Xamarin.Forms 2.3.5.256-pre6
  • Версия FSharp.Core 4.0.0.1

Код

 namespace Eclipsefest open System open Xamarin.Forms open Xamarin.Forms.Xaml type MenuItem = { Title : string TargetType : System.Type } type MenuPage() = inherit ContentPage() let _ = base.LoadFromXaml(typeof<MenuPage>) member this.Handle_Tapped(sender : Object, arg : EventArgs) = let navItem = sender :?> TextCell async { match navItem.Text with | "Information" -> do! this.Navigation.PushAsync(page = new NavigationPage(new InfoPage())) |> Async.AwaitIAsyncResult |> Async.Ignore | "Events" -> do! this.Navigation.PushAsync(new NavigationPage(new EventsPage())) |> Async.AwaitIAsyncResult |> Async.Ignore | "BusRoute" -> do! this.Navigation.PushAsync(new NavigationPage(new BusRoutePage())) |> Async.AwaitIAsyncResult |> Async.Ignore | "Glasses" -> do! this.Navigation.PushAsync(new NavigationPage(new GlassesPage())) |> Async.AwaitIAsyncResult |> Async.Ignore | "Merch" -> do! this.Navigation.PushAsync(new NavigationPage(new MerchPage())) |> Async.AwaitIAsyncResult |> Async.Ignore | "Day" -> do! this.Navigation.PushAsync(new NavigationPage(new DayPage())) |> Async.AwaitIAsyncResult |> Async.Ignore | "About" -> do! this.Navigation.PushAsync(new NavigationPage(new AboutPage())) |> Async.AwaitIAsyncResult |> Async.Ignore | _ -> do! this.Navigation.PushAsync(new NavigationPage(new EclipsefestPage())) |> Async.AwaitIAsyncResult |> Async.Ignore } |> Async.RunSynchronously 

обновление кода

 open System open Xamarin.Forms open Xamarin.Forms.Xaml type MenuItem = { Title : string TargetType : System.Type } type MenuPage() = inherit ContentPage() let _ = base.LoadFromXaml(typeof<MenuPage>) member this.Handle_Tapped(sender : Object, arg : EventArgs) = this.Navigation.PushAsync(new NavigationPage(new EclipsefestPage())) |> ignore 

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

Обновление кода 2

 open System open Xamarin.Forms open Xamarin.Forms.Xaml type MenuItem = { Title : string TargetType : System.Type } type MenuPage() = inherit ContentPage() let _ = base.LoadFromXaml(typeof<MenuPage>) member this.Handle_Tapped(sender : Object, arg : EventArgs) = let page = new EclipsefestPage() let navpage = new NavigationPage(page) let result = this.Navigation.PushAsync(navpage) result.RunSynchronously() 

Я начинаю чувствовать, что это ошибка. Я проверил, что страница и страница навигации создаются с помощью отдельных шагов до вызова Navigation.PushAsync и я все еще получаю одно и то же исключение.

ошибка

«PushAsync не поддерживается глобально на iOS, пожалуйста, используйте NavigationPage.» "

Трассировки стека

 System.InvalidOperationException: PushAsync is not supported globally on iOS, please use a NavigationPage. at Xamarin.Forms.Platform.iOS.Platform.Xamarin.Forms.INavigation.PushAsync (Xamarin.Forms.Page root, System.Boolean animated) [0x00000] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.iOS\Platform.cs:154 at Xamarin.Forms.NavigationProxy.OnPushAsync (Xamarin.Forms.Page page, System.Boolean animated) [0x00022] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Core\NavigationProxy.cs:190 at Xamarin.Forms.NavigationProxy.PushAsync (Xamarin.Forms.Page root, System.Boolean animated) [0x00013] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Core\NavigationProxy.cs:109 at Xamarin.Forms.NavigationProxy.OnPushAsync (Xamarin.Forms.Page page, System.Boolean animated) [0x00022] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Core\NavigationProxy.cs:190 at Xamarin.Forms.NavigationProxy.PushAsync (Xamarin.Forms.Page root, System.Boolean animated) [0x00013] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Core\NavigationProxy.cs:109 at Xamarin.Forms.NavigationProxy.OnPushAsync (Xamarin.Forms.Page page, System.Boolean animated) [0x00022] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Core\NavigationProxy.cs:190 at Xamarin.Forms.NavigationProxy.PushAsync (Xamarin.Forms.Page root, System.Boolean animated) [0x00013] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Core\NavigationProxy.cs:109 at Xamarin.Forms.NavigationProxy.PushAsync (Xamarin.Forms.Page root) [0x00000] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Core\NavigationProxy.cs:102 at <StartupCode$Eclipsefest>[email protected] (Microsoft.FSharp.Core.Unit unitVar) [0x00090] in /Users/terrancesmith/Projects/Eclipsefest/Eclipsefest/MenuPage.xaml.fs:19 at [email protected][b,a].Invoke (Microsoft.FSharp.Control.AsyncParams`1[T] args) [0x00047] in <5584acdb904cf4daa7450383dbac8455>:0 at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.10.0.36/src/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:151 at Microsoft.FSharp.Control.AsyncBuilderImpl.commit[a] (Microsoft.FSharp.Control.AsyncBuilderImpl+Result`1[T] res) [0x00030] in <5584acdb904cf4daa7450383dbac8455>:0 at Microsoft.FSharp.Control.CancellationTokenOps.RunSynchronously[a] (System.Threading.CancellationToken token, Microsoft.FSharp.Control.FSharpAsync`1[T] computation, Microsoft.FSharp.Core.FSharpOption`1[T] timeout) [0x000a3] in <5584acdb904cf4daa7450383dbac8455>:0 at Microsoft.FSharp.Control.FSharpAsync.RunSynchronously[T] (Microsoft.FSharp.Control.FSharpAsync`1[T] computation, Microsoft.FSharp.Core.FSharpOption`1[T] timeout, Microsoft.FSharp.Core.FSharpOption`1[T] cancellationToken) [0x00071] in <5584acdb904cf4daa7450383dbac8455>:0 at Eclipsefest.MenuPage.Handle_Tapped (System.Object sender, System.EventArgs arg) [0x00008] in /Users/terrancesmith/Projects/Eclipsefest/Eclipsefest/MenuPage.xaml.fs:16 at Xamarin.Forms.Cell.OnTapped () [0x00008] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Core\Cells\Cell.cs:106 at Xamarin.Forms.TextCell.OnTapped () [0x00000] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Core\Cells\TextCell.cs:82 at Xamarin.Forms.TableView+TableSectionModel.OnRowSelected (System.Object item) [0x00007] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Core\TableView.cs:214 at Xamarin.Forms.TableModel.RowSelected (System.Object item) [0x0001a] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Core\TableModel.cs:65 at Xamarin.Forms.TableModel.RowSelected (System.Int32 section, System.Int32 row) [0x00000] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Core\TableModel.cs:57 at Xamarin.Forms.Platform.iOS.TableViewModelRenderer.RowSelected (UIKit.UITableView tableView, Foundation.NSIndexPath indexPath) [0x00000] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.iOS\Renderers\TableViewModelRenderer.cs:85 at at (wrapper managed-to-native) UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr) at UIKit.UIApplication.Main (System.String[] args, System.IntPtr principal, System.IntPtr delegate) [0x00005] in /Users/builder/data/lanes/4691/d2270eec/source/xamarin-macios/src/UIKit/UIApplication.cs:79 at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x00038] in /Users/builder/data/lanes/4691/d2270eec/source/xamarin-macios/src/UIKit/UIApplication.cs:63 at Eclipsefest.iOS.Main.main (System.String[] args) [0x00001] in <59853c0a6da8a60ca74503830a3c8559>:0 

Ответ От людей на Xamarin.

В коде, который вы показали, вы завертываете новую страницу, которую хотите вставить в NavigationPage. Однако это страница, на которую вы нажимаете, которая должна находиться на странице навигации.

Самый простой способ сделать это – обернуть свою начальную страницу в NavigationPage, а затем установить ее как MainPage. Затем вы просто нажимаете новые страницы напрямую, не обертывая их в другой NavigationPage, потому что это приведет к другим проблемам. Проверьте это:

https://gist.github.com/jimmgarrido/d0b702c1282faa5bb91d0ed14e2d7e1b

 namespace FForms open System open Xamarin.Forms type TestPage() as this = inherit ContentPage() let nextBtn = Button(Text = "Next Page") let layout = StackLayout() let handler = EventHandler(fun sender args -> let newPage = ContentPage(BackgroundColor = Color.Red) do this.Navigation.PushAsync(newPage)) do nextBtn.Clicked.AddHandler handler do layout.Children.Add nextBtn do base.Content <- layout type App() = inherit Application(MainPage = NavigationPage(TestPage())) 

Надеюсь это поможет!

Он сделал ~

  • Метод Overridden Draw для ViewRenderer блокирует пользовательский интерфейс
  • Создание профиля создания на XCode
  • Ошибка Xamarin.Forms IOS, заменяющая существующую подпись
  • Как сделать кнопку скрытой в C # Xamarin IDE iOS
  • Можем ли мы выбрать изображение с телефона (Android / iOS) и загрузить его на сервер с общим кодом (Xamarin Forms)?
  • Переключение IsVisible для stacklayout внутри scrollview не обновляется должным образом в форматах Xamarin iOS
  • Как установить высоту строки ListView в Xamarin.Forms
  • Создание навигационной панели исчезает в Xamarin.Forms
  • Цвет текста строки состояния Xamarin iOS
  • Не удалось запустить iOS Simulator в Mac
  • Xamarin.Forms Точки прерывания IOS не попадают
  • Давайте будем гением компьютера.