Xamarin.ios 尝试转到上一个情节提要时出现NullReferenceException

Xamarin.ios 尝试转到上一个情节提要时出现NullReferenceException,xamarin.ios,Xamarin.ios,这里有点像iOS初学者。我的任务是创建一个按钮,该按钮将导航到上一个视图控制器。我尝试了很多不同的方法,但最近的方法如下: partial void ButtonPressedPreviousOne(UIButton sender) { UIStoryboard HomeStoryboard = UIStoryboard.FromName("Home", null); UserProfileViewController prevController = H

这里有点像iOS初学者。我的任务是创建一个按钮,该按钮将导航到上一个视图控制器。我尝试了很多不同的方法,但最近的方法如下:

partial void ButtonPressedPreviousOne(UIButton sender)
    {
        UIStoryboard HomeStoryboard = UIStoryboard.FromName("Home", null);
        UserProfileViewController prevController = HomeStoryboard.InstantiateViewController("User_Profile_VC") as UserProfileViewController;
        NavigationController.PopToViewController(prevController, true);
    }

这会引发空引用异常。我只是部分理解这是什么意思。上述代码是否有问题,或者我是否遗漏了完全不同的内容?

iOS导航控制器具有方法
NavigationController.PopViewController(true)
。 试试这个。但我强烈建议在这样做之前检查堆栈
public bool CanGoBack=>NavigationController.ViewControllers.Length>1

让我们看看导航是如何工作的:

推送:

要从一个页面移动到另一个页面,应用程序将推送一个新页面 在导航堆栈上,它将成为活动页面,如下所示 如下图所示:

推送页面时,我们通常使用:

NavigationController.PushViewController();
流行音乐:

要返回上一页,应用程序将弹出 导航堆栈中的当前页面和最顶端的新页面 成为活动页面,如下图所示:

当我们弹出页面时:

如果要返回上一页,请使用:

NavigationController.PopViewController(true);
NavigationController.PopToRootViewController(true);
NavigationController.PopToViewController(viewController, true);
如果要返回到
根页面
,请使用:

NavigationController.PopViewController(true);
NavigationController.PopToRootViewController(true);
NavigationController.PopToViewController(viewController, true);
如果要返回到
导航堆栈中的
特定页面
,请使用:

NavigationController.PopViewController(true);
NavigationController.PopToRootViewController(true);
NavigationController.PopToViewController(viewController, true);
参考:

返回您的代码

如果使用
PopToViewController
,则
第一个参数(代码中的
prevController
)应该是
导航堆栈中现有的视图控制器,而不是新创建的。由于创建的
prevController
不在
导航堆栈中,因此出现空引用异常

在您的情况下,您可以使用:

   var navController = this.NavigationController;

   foreach (var controller in navController.ViewControllers)
   {
       if (controller is UserProfileViewController)
          {
              NavigationController.PopToViewController(controller,true);
              break;
          }
    }

注意:如果
UserProfileViewController
是要弹出的上一页,请使用
NavigationController.PopViewController(true)直接”更简单、更快。

首先,您实际使用的是NavigationController吗?第二,您正在创建一个新的Home实例并尝试弹出到它-这不是导航的工作方式。我明白了。是的,它是一个导航控制器。我真的知道那么多!那么它应该是像NavigationController.PopViewController(true)这样的吗?如果您只想转到导航堆栈中的上一页,那么是的,我只是尝试了一下,但它仍然会抛出该异常。我字面上就是这样写的:partial void ButtonPressedPreviousOne(UIButton sender){NavigationController.PopViewController(true);}然后NavigationController必须为null