之前必须在当前上下文的推送堆栈中

时间:2018-03-27 12:42:59

标签: c# xamarin.forms xamarin.ios

我正在使用Xamarin Form PCL创建一个iOS应用程序.Page的流程为 Login page - > Page Main - > Page OrderList - > Page OrderItem - > Page Signature - > Page Camera。问题是从主页面到相机页面我可以没有任何问题但是当我尝试从Camera页面返回到OrderList页面时,我收到异常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

希望有人知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

如果出现此错误,可能是因为死页正在调用该函数。例如,如果您通过

在主页中使用订阅事件处理页面转换

MessagingCenter.Subscribe<Application>();

当您通过 PopAsync() “离开”主页面时(例如,转到登录页面,登录后将创建一个新的主页面),您需要先取消订阅任何事件,否则下次调用时导航事件,死页仍在侦听,并会在已删除时再次尝试将其删除。我希望这是有道理的。

您也可以检查 Navigation.NavigationStack 是否为空,如果是则返回,但这并不能解决根本问题。