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 9.3 beta 版的Safari弹出框竟如此安卓?