Я создаю приложение для iOS с помощью Xamarin Form PCL. Поток страницы как
Login page -> Page Main -> Page OrderList -> Page OrderItem -> Page Signature -> Page Camera. Проблема с главной страницы на страницу камеры. Я могу перейти без каких-либо проблем, но когда я пытаюсь вернуться со страницы камеры на страницу списка заказов, я получаю исключение before must be in the pushed stack of the current context . Я не знаю, что-то не так. Потому что тот же код отлично работает в Android, но не работает в iOS.
Navigation.InsertPageBefore(new OrderList(), this);
await Navigation.PopAsync();
полное исключение
Message: before must be in the pushed stack of the current context
InnerMessage:
StackTrace: at Xamarin.Forms.Internals.NavigationProxy.OnInsertPageBefore (Xamarin.Forms.Page page, Xamarin.Forms.Page before) [0x00020] in D:\agent\_work\1\s\Xamarin.Forms.Core\NavigationProxy.cs:150
at Xamarin.Forms.Internals.NavigationProxy.InsertPageBefore (Xamarin.Forms.Page page, Xamarin.Forms.Page before) [0x00000] in D:\agent\_work\1\s\Xamarin.Forms.Core\NavigationProxy.cs:59
at AT.PictureAfterSignature+<Process>d__9.MoveNext () [0x000a2] in E:\Projects\xamrine\Source\ATiOS\AT\AT\PictureAfterSignature.xaml.cs:422
Source: Xamarin.Forms.Core
Надеюсь, кто-нибудь знает, как решить эту проблему.
@ A.Goutam Кажется, вашего Page Camera нет в стеке, как вы представляете Camera? используя PushModalAsync()? Также, если вы хотите вернуться к Page OrderList, вы можете попробовать удалить другие страницы вместо создания новой.
@ LandLu-MSFT Я открываю страницу камеры с Navigation.InsertPageBefore(new PictureAfterSignature(), this); await Navigation.PopAsync(); PictureAfterSignature - это страница моей камеры
@ LandLu-MSFT: Тот же код отлично работает на Android
@ A.Goutam Между Android и iOS могут быть некоторые различия в навигации. Вы имеете в виду, что каждый раз, когда вы хотите показать новую страницу, вы всегда вставляете и открываете? Значит, Page OrderItem, Page Signature и Page Camera на одном уровне?
@ LandLu-MSFT Каждый раз, когда пользователь переходит на следующую страницу, я использую Navigation.InsertPageBefore ()
@ LandLu-MSFT Для проверки стека навигации я использовал if (Navigation.NavigationStack.Count == 0) {} и это условие истинно
@ A.Goutam Можете ли вы опубликовать небольшой образец, чтобы указать это? Поскольку это сложно сказать между таким количеством страниц, но это происходит только на Page Camera.
@ LandLu-MSFT, как я могу поделиться своим кодом, указанным выше, с моим вопросом?
@ A.Goutam Тогда это странно, прежде чем вы вставляете и открываете, в Навигации должна быть хотя бы одна страница (по крайней мере, текущая страница находится в Навигации).
@ A.Goutam Попробуйте создать пустое приложение с функциями только вставки и всплывающих страниц.





Если вы получили эту ошибку, это может быть связано с тем, что мертвая страница вызывает функцию. Например, если вы обрабатываете переходы страниц с помощью события Subscribe на своей главной странице через
MessagingCenter.Subscribe<Application>();
Когда вы «покидаете» главную страницу (например, чтобы перейти на страницу входа, которая после входа в систему создаст новую главную страницу) через PopAsync (), вам нужно сначала отменить подписку на любые события, иначе в следующий раз вы вызовете событие навигации , мертвая страница все еще прослушивает и попытается удалить себя снова, когда она уже удалена. Я надеюсь, что в этом есть смысл.
Вы также можете проверить, пуст ли Navigation.NavigationStack, и просто вернуть, если это так, но это не решит основную проблему.
Посмотрим, понимаю ли я. Вы хотите перейти от
CameraPageнепосредственно кOrderListPage? если это так, посколькуOrderListPageуже находится в стеке, только то, что он находится на расстоянии 3 "всплывающих окон", почему бы вам просто не удалитьSignaturePageизOrderItemPage, а затем просто сделать один Pop.