Before должен находиться в переданном стеке текущего контекста

Я создаю приложение для 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

Надеюсь, кто-нибудь знает, как решить эту проблему.

Посмотрим, понимаю ли я. Вы хотите перейти от CameraPage непосредственно к OrderListPage? если это так, поскольку OrderListPage уже находится в стеке, только то, что он находится на расстоянии 3 "всплывающих окон", почему бы вам просто не удалить SignaturePage из OrderItemPage, а затем просто сделать один Pop.

pinedax 27.03.2018 19:39

@ A.Goutam Кажется, вашего Page Camera нет в стеке, как вы представляете Camera? используя PushModalAsync()? Также, если вы хотите вернуться к Page OrderList, вы можете попробовать удалить другие страницы вместо создания новой.

Anonymous 28.03.2018 08:45

@ LandLu-MSFT Я открываю страницу камеры с Navigation.InsertPageBefore(new PictureAfterSignature(), this); await Navigation.PopAsync(); PictureAfterSignature - это страница моей камеры

A.Goutam 28.03.2018 08:55

@ LandLu-MSFT: Тот же код отлично работает на Android

A.Goutam 28.03.2018 08:58

@ A.Goutam Между Android и iOS могут быть некоторые различия в навигации. Вы имеете в виду, что каждый раз, когда вы хотите показать новую страницу, вы всегда вставляете и открываете? Значит, Page OrderItem, Page Signature и Page Camera на одном уровне?

Anonymous 28.03.2018 09:04

@ LandLu-MSFT Каждый раз, когда пользователь переходит на следующую страницу, я использую Navigation.InsertPageBefore ()

A.Goutam 28.03.2018 09:07

@ LandLu-MSFT Для проверки стека навигации я использовал if (Navigation.NavigationStack.Count == 0) {} и это условие истинно

A.Goutam 28.03.2018 09:12

@ A.Goutam Можете ли вы опубликовать небольшой образец, чтобы указать это? Поскольку это сложно сказать между таким количеством страниц, но это происходит только на Page Camera.

Anonymous 28.03.2018 09:12

@ LandLu-MSFT, как я могу поделиться своим кодом, указанным выше, с моим вопросом?

A.Goutam 28.03.2018 09:15

@ A.Goutam Тогда это странно, прежде чем вы вставляете и открываете, в Навигации должна быть хотя бы одна страница (по крайней мере, текущая страница находится в Навигации).

Anonymous 28.03.2018 09:15

@ A.Goutam Попробуйте создать пустое приложение с функциями только вставки и всплывающих страниц.

Anonymous 28.03.2018 09:16
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
11
879
1

Ответы 1

Если вы получили эту ошибку, это может быть связано с тем, что мертвая страница вызывает функцию. Например, если вы обрабатываете переходы страниц с помощью события Subscribe на своей главной странице через

MessagingCenter.Subscribe<Application>();

Когда вы «покидаете» главную страницу (например, чтобы перейти на страницу входа, которая после входа в систему создаст новую главную страницу) через PopAsync (), вам нужно сначала отменить подписку на любые события, иначе в следующий раз вы вызовете событие навигации , мертвая страница все еще прослушивает и попытается удалить себя снова, когда она уже удалена. Я надеюсь, что в этом есть смысл.

Вы также можете проверить, пуст ли Navigation.NavigationStack, и просто вернуть, если это так, но это не решит основную проблему.

Другие вопросы по теме