iOS 5 中的弹出框变化?

Posted

技术标签:

【中文标题】iOS 5 中的弹出框变化?【英文标题】:Popover changes in iOS 5? 【发布时间】:2011-11-22 12:06:06 【问题描述】:

我刚刚开发了一个 iPad 应用程序进行测试,但在 ios 4.3 中完成了。现在我已经在模拟器中更新到 5.0,并且还按照 Apple 的步骤在运行 5.0 的 iPad 上进行了测试

在 4.3 模拟器中一切正常。但是在 5.0 模拟器和 iPad 上,我所有源自 UIButtons 的弹出框都会使应用程序崩溃。我有一个来自导航栏按钮的弹出窗口,效果很好。

每个崩溃的弹出框都会显示其内容(带有 pdf 文件的 UIWebview),但是当我单击屏幕上的任意位置时,应用程序会崩溃(弹出框内外)。

我可以发布一些代码,但希望这个描述有助于给某人一个想法。我不会手动关闭弹出窗口或检查它是否打开,但由于这不仅仅通过尝试触摸它的启动 UIButton 发生,我认为这不是它发生的原因。此外,它在 4.3 下也能正常工作


编辑:多亏了斯蒂芬的评论,这个问题现在已经解决了。我在popOver的内容viewController中添加了:

- (void) dealloc 
 [webView release];
 [super release];

通常我会调用[super dealloc] 而不是[super release],但[super dealloc] 没有修复异常(exc_bad_access)。希望我没有草率地解决这个问题!

【问题讨论】:

什么异常?堆栈跟踪是什么?这很可能是内存管理问题。 我猜它需要一个可爱的存储故障,没有回溯。 (当然,iOS 5 模拟器无论如何也不会提供回溯。) 谢谢斯蒂芬,你在内存管理方面做得很好。我不得不放入 dealloc 方法并让 super 释放。因为它适用于我什至没有想到的 4.3 模拟器。我只是以与我为弹出内容分配 webView 相同的方法发布。 执行[super release] 没有任何意义——这与执行[self release] 没有什么不同,并且可能对象已经被释放,否则dealloc 将不会被调用。我怀疑你只是把罐子踢了一点。 我同意 Hot Licks。在-dealloc 中调用[super release] 绝对是错误的。不在-dealloc 方法中调用[super dealloc] 是内存泄漏,应该给你一个编译器警告。如果输入[super dealloc] 导致您崩溃,那么也许您应该改正那些 问题... 【参考方案1】:

我有一个帖子开始收集这样的错误,但论坛警察取消了它。可以说 iOS 5 充满了不兼容性。

我不能肯定地说你的问题是什么,但很有可能它与 UINavigationController 的更改有关,这导致 UIViewController 的 navigationController 对于弹出窗口为 nil,而 parentViewController 取而代之。

不幸的是,parentViewController 是新的,所以你必须,例如,测试 respondsToSelector:@selector(parentViewController) 并获取 parentViewController(如果存在),否则为 navigationController。

必须在我们拥有的应用程序的大约 30 个地方添加此逻辑。

【讨论】:

以上是关于iOS 5 中的弹出框变化?的主要内容,如果未能解决你的问题,请参考以下文章

在 didSelectRowAtIndexPath 上关闭 ios 中的弹出框

分享iOS功能界面漂亮的弹出框

iOS 9.3 beta 版的Safari弹出框竟如此安卓?

iOS:关闭使用界面生成器生成的弹出框,并在弹出框内使用按钮

iOS最好用的弹出框

iOS最好用的弹出框