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