gpt4 book ai didi

iphone - 防止 uinavigationcontroller 设置中 popViewControllerAnimated 的错误访问崩溃

转载 作者:行者123 更新时间:2023-11-29 11:23:20 25 4
gpt4 key购买 nike

所以,在内存不足的情况下,我的 Root View 被卸载了。这是预料之中的。但是,我该如何处理需要弹出的模态/推送 View Controller ,因为它们引用了主导航 Controller ?我在推送 View Controller 中有一个自定义完成按钮,它调用 [self.navigationController popViewControllerAnimated:YES]。如果已卸载 Root View ,则会出现错误访问错误。有更好的方法吗?

我的设置是AppDelegate 有一个 NavigationController这个 NavigationController 有一个 View Controller MainViewController

//MainViewController.m
- (IBAction)showAnotherController:(id)sender
{
AnotherViewController * anotherViewController;
anotherViewController = [[AnotherViewController alloc] initWithNibName:@"AnotherView" bundle:nil];

[self.navigationController pushViewController:anotherViewController animated:YES];
[anotherViewController release];
}

//...Here I can simulate a memory warning to force unloading of MainViewController's view

//in AnotherViewController.m, called from a custom toolbar item
- (IBAction)done:(id)sender
{
[self.navigationController popViewControllerAnimated:YES]; // bad access here, looks like self.navigationController is no longer available. Am I doing this wrong?

}

最佳答案

您描述的情况不会导致访问错误。但是,如果您不小心处理所描述的场景,您将无法访问。由于您没有向我展示任何代码,因此我无法告诉您这是您遇到的问题,但这是一个非常常见的问题。

当您收到内存警告并且您的 View 被卸载时,您可能释放了一堆东西。除了释放变量外,您还必须将它们设置为 nil。否则,您将面临向已释放对象发送消息的风险,这会导致访问失败。

同样,我不知道这是你的问题,但这通常是问题所在。

编辑:既然你似乎相信 self.navigationController 不存在(它可能存在),我将告诉你一个叫做 NSZombie 的东西:

NSZombie 会告诉您正在向哪个已释放对象发送消息(又名 EXC_BAD_ACCESS)。当您获得 EXC_BAD_ACCESS 时,这是一个非常有用的工具,因此请学习如何使用它。

要激活 NSZombie,请执行以下操作:

  1. 获取可执行文件的信息。
  2. 转到参数选项卡。
  3. 在“要在环境中设置的变量:”部分添加:

名称:NSZombieEnabled值:是

然后像往常一样运行您的应用程序,当它崩溃时它会告诉您哪个已释放的对象收到了消息。

关于iphone - 防止 uinavigationcontroller 设置中 popViewControllerAnimated 的错误访问崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5528508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com