【发布时间】:2015-02-14 19:35:04
【问题描述】:
我在 AppStore 中有一个应用程序(仅限 iPhone,兼容 iOS3.1+,2011 Xcode 3 编译),三年来一直运行良好,没有受到任何影响。然而,最近它在某些条件下开始在 iOS8 上“冻结”。这发生在几个地方,当 UIActionSheet 被显示时。屏幕上什么都没有弹出,应用程序不会崩溃,而是对任何点击都没有反应;系统控制台中没有任何内容。发生这种情况后,“退出”的唯一方法是从任务切换器中手动终止应用程序并重新启动它。
我相信原因是我从 UIViewController 方法显示 UIActionSheet 的方式,就像这 3 行一样简单:
UIActionSheet* actSheet = [[UIActionSheet alloc] initWithTitle:@"Could not connect to [...]" delegate:nil cancelButtonTitle:@"OK" destructiveButtonTitle:nil otherButtonTitles:nil];
[actSheet showInView:self.view.window];
[actSheet autorelease];
我认为原因是使用了self.view.window,它是UIWindow(它自然地继承了UIView)-并且仅使用self.view应该可以解决问题(我在这里阅读@987654321 @ that showInView:现在仅适用于附加了 UIViewController 的 UIView)。为什么我首先使用 self.view.window - 可能我读到了 this issue 与取消按钮对齐。
但是,在 Xcode 6 中编译我的应用程序时,我无法重现该问题 - 并且 Xcode 3 无法调试 iOS8。我的难题是如何消除无法重现以验证的错误。
您是否对 UIActionSheet 的行为变化有见解,是什么导致 iOS8 中的挂起?
PS。请不要告诉我“UIActionSheet 在 iOS8 中已弃用,请改用 UIAlertController”。这是一个不正确的答案:“deprecated”并不意味着 UIActionSheet 不再在 iOS8 中工作 - 它只是不鼓励使用新代码,并且可能会在下一个版本中被删除。但我想保持与 iOS5+ 的兼容性(我的推理类似于 this)所以我宁愿修复它的使用 - 我上面提到的 showInView:self.view.window 似乎很可疑。
【问题讨论】:
-
这3行在哪个UIViewController方法中调用?
-
问题,它是在 iPad 上,还是在 iPhone 上?
-
@gwdp:仅限 iPhone - 谢谢,上面已更新。
-
@gagarwal,这些是在我的 UIViewController 的方法中调用的,它在屏幕上/具有焦点。它只是顶部的导航栏,下面是视图,没有选项卡。在一种情况下,调用在
textFieldShouldReturn中,在另一种情况下(另外两个) - 单击按钮时(touch-up-inside 事件处理程序) -
@matt - 把评论变成答案,如果没有更好的解释,可以得到赏金吗?
标签: uiview ios8 uiactionsheet