在iOS 6.0下呈现UIImagePickerController时发生崩溃
我的应用程序只支持横向方向通过supportedInterfaceOrientation
属性。
使用iOS 6之前的iOS,我的应用程序可以通过presentViewController:animated:completion:
成功加载UIImagePickerController
一个实例presentViewController:animated:completion:
即使UIImagePickerController
本身只支持纵向。
图像select器简单地将其自身呈现给用户。 用户旋转手机,select他们的形象,然后旋转回风景。
在iOS 6.0下,调用presentViewController:animated:completion:
使用UIImagePickerController
实例崩溃应用程序。 我可以通过将肖像选项添加到我的supportedInterfaceOrientation
属性来防止崩溃。
然而,纵向操作真的没有任何意义,我的应用程序。 我以为我可以使用shouldAutorotateToInterfaceOrientation
允许应用程序“支持肖像”,但只允许旋转到肖像在这一个视图。 但是现在这个方法已经被废弃了,我不能使用与shouldAutorotate相同的技术。
有没有人有任何想法我可以解决这个问题在iOS 6.0下?
iOS 6.1 – 修复
从iOS 6.1开始, 这不再发生 ,为了避免在iOS 6.0.x下崩溃,遵循我的提示非常重要,下面的内容仍然适用。
iOS 6.0.x的解决方法
这实际上是iOS 6.0中的一个错误,在未来的iOS版本中这个问题应该得到解决。
来自苹果的一位工程师已经解释了这个错误和一个解决方法: https : //devforums.apple.com/message/731764
发生这种情况的原因是应用程序只需要横向方向,但一些cocoa触摸视图控制器严格要求纵向方向,这是错误 – 不是他们应该要求更多纵向,而是他们对应用程序要求的解释。
这方面的一个例子可以是:
支持风景的iPad应用程序仅通过UIPopoverController显示UIImagePickerController。 UIImagePickerController需要纵向,但应用程序只强制横向。 错误和…崩溃
其他被报告为有问题的框架包括Game Centerlogin视图控制器。
解决方法非常简单,但并不理想…您可以在info.plist / project info窗格中声明正确的方向,但在Application Delegate类中声明允许所有方向。
现在,您添加到窗口中的每个视图控制器必须指定它自己只能是横向。 请检查链接了解更多详情。
我不能强调你不应该UIImagePickerController
因为接受的解决scheme是坚持你做的。
这里重要的是“ 这个类是为了原样使用,不支持子类” 。
在我的情况下,我把它添加到我的应用程序的委托(我有一个风景只有应用程序),这告诉图像select器它可以显示,因为肖像是支持的:
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{ return UIInterfaceOrientationMaskAll; }
然后在我的视图控制器碰巧是一个UINavigationController
,我包括一个类别与以下内容:
- (NSUInteger)supportedInterfaceOrientations{ return UIInterfaceOrientationMaskLandscape; }
现在我的应用程序不旋转,图像select器询问委托人是否可以显示为肖像,它被告知没关系。 所以一切都很好。
我有一个类似的问题,但在iPad景观应用程序。 我在展示图像select器。 它在iOS 6下崩溃。这个错误提示select器需要肖像,但是应用程序只提供横向视图,而且…重要的是…select器的shouldRotate返回YES。
我添加到我的ViewControllerClass.m创buildselect器
@interface NonRotatingUIImagePickerController : UIImagePickerController @end @implementation NonRotatingUIImagePickerController - (BOOL)shouldAutorotate { return NO; } @end
然后用这个类代替
UIImagePickerController *imagePicker = [[NonRotatingUIImagePickerController alloc] init]; [myPopoverController setContentViewController:imagePicker animated:YES];
这解决了我的问题。 你的情况有点不一样,但是听起来基本上是一样的错误。
虽然子类UIImagePickerController的作品,类别是一个更好的解决scheme:
@implementation UIImagePickerController (NonRotating) - (BOOL)shouldAutorotate { return NO; } -(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return UIInterfaceOrientationPortrait; } @end
从iOS 7.1报告:
除了上面的答案指定之外,您似乎必须在info.plist中完全启用纵向模式。
没有这些上述代码/修复没有为我工作。
-(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; }
将解决这个问题,但从iOs7