Iphone 请协助modalViewController崩溃

Iphone 请协助modalViewController崩溃,iphone,crash,modalviewcontroller,retain,presentmodalviewcontroller,Iphone,Crash,Modalviewcontroller,Retain,Presentmodalviewcontroller,当我通过以下方式关闭ModalViewController时,我的应用程序正在崩溃: [self.parentViewController dismissModalViewControllerAnimated:YES]; 当用户单击UINavigationController(“NavRoot”)的一个单元格时,会显示此模式视图控制器(“MVC”)——下面是代码: MVC *modalView = [[MVC alloc] initWithNibName:@"MVC" bundle:nil];

当我通过以下方式关闭ModalViewController时,我的应用程序正在崩溃:

[self.parentViewController dismissModalViewControllerAnimated:YES];
当用户单击UINavigationController(“NavRoot”)的一个单元格时,会显示此模式视图控制器(“MVC”)——下面是代码:

MVC *modalView = [[MVC alloc] initWithNibName:@"MVC" bundle:nil];
[self.navigationController presentModalViewController: modalView animated:YES];
[modalView release];         
加载的“modalView”仅包含两个对象:一个UIWebView对象和一个“完成”按钮,单击该按钮时,会通过以下方式执行操作:

[self.parentViewController dismissModalViewControllerAnimated:YES];
除非我单击“完成”,否则应用程序会崩溃。

当我使用NSZombies运行Instruments时,我确实看到保留计数达到了-1,但我不知道是什么导致了过度释放

我发现解决问题的唯一方法是在“NavRoot”中添加“[modalView retain]”语句,这是执行modalView显示的viewController:

MVC *modalView = [[MVC alloc] initWithNibName:@"MVC" bundle:nil];
[self.navigationController presentModalViewController: modalView animated:YES];
[modalView retain];  //  <<== new 'retain' statement
[modalView release];
当我运行“Analyze”(第34行分配的对象的潜在泄漏)时,这两个选项都会抛出标志,但它们确实解决了问题。 尽管如此,我还是担心这会导致苹果从应用商店拒绝该应用

有没有关于是什么导致过度释放的想法?或者我如何进一步尝试隔离/识别问题

附加仪器/僵尸报告的图像: 如果你这样做

[self.navigationController presentModalView控制器:modalView动画:是]

那你就应该把它当作废话

[self.navigationController dismissModalViewControllerAnimated:YES]

而不是

[self.parentViewController解除ModalViewController激活:是]


你想从哪里消除这种观点?实际的modalView还是parentView?在我看来,您正在尝试取消一个已经取消并随后发布的模式视图。

您是否正在使用iOS 5?当我将应用程序从ios4切换到ios5时,我也遇到了同样的问题

ParentViewController现在称为presentingViewController


不过,您可以在模态视图中调用[self dismissModalViewController],它应该自行关闭。我不是百分之百这么认为,也不能检查,因为我不在我的mac电脑附近,但我记得我在文档中读过它,

要关闭一个
modalViewController
我只是做了:
[self dismissModalViewControllerAnimated:YES]

[自我解除ModalViewController激活:是]
在iOS 5上不工作

我已经建立了一个类别,在iOS 4上添加了
presentingViewController
。(它在iOS 5上禁用自身。)

只需包含2个文件,即可无缝工作

请看


我希望这对你和我都有好处;它使你的代码更干净

你能展示僵尸仪器的历史吗?好的,我会把它放上去-现在就要运行,但一定会发布它,因为我一定要弄清楚这件事!你的MVC dealloc看起来像什么?MVC是webview的代表吗?如果是的话,你会在dealloc中清理吗?@Firoze和@Craig Mellon:我刚刚研究了所有这些东西,我认为它解决了这个问题。代理是Interface Builder中的“文件的所有者”(将UIWebView连接到“文件的所有者”),我确保UIWebView对象也在dealloc中被释放-现在它不再崩溃。至少到目前为止还没有。所以你肯定给我指出了正确的方向!我从内部拒绝modalView。有一个“完成”单击modalView中的按钮时,调用“[self.parentViewController dismissModalViewControllerAnimated:YES];”语句。我只是试着把它切换到“[self.navigationController dismissModalViewControllerAnimated:是];”——现在它什么都不做。它根本没有发布modalView,它只是放在那里……我使用的是iOS 4.0.2,“presentingViewController”只是iOS 5,所以我不能使用它。至于使用普通的老款[自解职modalViewController]——我从一开始就是这样做的——从实际解职modalViewController的角度来看,它工作得很好——但应用程序正在崩溃。我研究并发现了使用“[self.ParentViewController dismissModalViewController]”的建议,该建议同样有效,但也会导致崩溃。因此,无论我使用什么“自我”变体,应用程序都会崩溃。但这与此无关。这是关于一个保留/释放问题(续)。似乎我正在释放-或试图与-一个不再存在的viewController对话。不知怎的,它已经发布了。但我不知道是什么释放了它。有什么想法吗?我曾经对web请求有过一个问题,因为它们是异步的,如果我关闭了webrequest,然后取消了我的模式视图控制器,webrequest试图调用我的viewcontroller中的一个方法,而我的viewcontroller现在已经发布了。我的问题是,我没有在web请求上清除我的代理。因此,我会检查模态视图控制器中的dealloc方法,确保您在webview上将委托设置为nil,并取消webview上的任何请求。我以前没有使用过webview,所以不确定您需要检查什么,但这是我首先要看的地方。@Firoze和@Craig Mellon:我只是查看了所有这些东西,我认为它解决了问题。代理是Interface Builder中的“文件的所有者”(将UIWebView连接到“文件的所有者”),并且我确保UIWebView对象也在dealloc中被释放-现在它不再崩溃了。至少到目前为止还没有崩溃。所以你肯定为我指明了正确的方向!
MVC *modalView = [[MVC alloc] initWithNibName:@"MVC" bundle:nil];
[self.navigationController presentModalViewController: modalView animated:YES];
// commenting out the 'release':
// [modalView release];