iOS 6.1 - 已修复
从 iOS 6.1 开始,这不再发生,遵循我的提示以避免在 iOS 6.0.x 下崩溃非常重要,以下仍然适用。
iOS 6.0.x 解决方法
这实际上是 iOS 6.0 中的一个错误,应该在未来的 iOS 版本中修复。
Apple 的工程师在此处解释了此错误和解决方法:https ://devforums.apple.com/message/731764
发生这种情况是因为应用程序只需要横向,但一些 Cocoa 触摸视图控制器要求严格的纵向方向,这是错误的 - 不是他们应该需要更多的纵向,而是他们对应用程序要求的解释。
这方面的一个例子如下:
支持横向的 iPad 应用程序仅通过 UIPopoverController 显示 UIImagePickerController。UIImagePickerController 需要纵向,但应用程序仅强制横向。错误和...崩溃
其他被报告为有问题的框架包括 Game Center 登录视图控制器。
解决方法非常简单但并不理想......您保留在 info.plist/project 信息窗格中声明的正确方向,但在 Application Delegate 类中您声明您允许所有方向。
现在,您添加到窗口的每个 View Controller 都必须指定它自己只能是 Landscape。请检查链接以获取更多详细信息。
我不能强调你不应该将多少子类UIImagePickerController
化,因为公认的解决方案坚持你这样做。
这里重要的是“此类旨在按原样使用,不支持子类化。”
在我的情况下,我将此添加到我的应用程序的委托(我有一个仅限横向的应用程序),这告诉图像选择器它可以显示,因为支持纵向:
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
return UIInterfaceOrientationMaskAll;
}
然后在我碰巧是的视图控制器中UINavigationController
,我包含了一个包含以下内容的类别:
- (NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskLandscape;
}
现在我的应用程序没有旋转,图像选择器询问代理它是否可以显示为纵向,它被告知没关系。所以一切都很好。