崩溃在iOS 6.0下呈现的UIImagePickerController(Crash on pre

2019-06-18 06:01发布

我的应用程序只支持通过横向放置supportedInterfaceOrientation性能。

使用之前的iOS 6在iOS,我的应用程序可以成功加载的一个实例UIImagePickerController通过presentViewController:animated:completion:即使UIImagePickerController本身只支持纵向。

图片选择器只是提出了自己侧身给用户。 用户旋转手机,拿起自己的形象,然后再转回景观。

在iOS的6.0,调用presentViewController:animated:completion:UIImagePickerController实例崩溃的应用程序。 我可以通过添加人像选项,我的防止死机supportedInterfaceOrientation性能。

然而,在肖像操作真是为我的应用程序是没有意义的。 我原以为我可以用shouldAutorotateToInterfaceOrientation ,让应用程式“支持肖像”,但只允许旋转为纵向的这一说法。 但现在这种方法已经过时了,我不能shouldAutorotate使用相同的技术。

没有人有任何想法如何,我可以解决这个问题的iOS 6.0下?

Answer 1:

的iOS 6.1 - 固定

由于iOS的6.1, 这不再出现 ,它是按照我的提示,以避免下的iOS对6.0.x崩溃非常重要,下面仍然适用于这一点。


iOS版对6.0.x解决方法

这是实际上在IOS 6.0的一个错误,这应该是固定在未来的iOS版本。

从苹果公司的工程师已经在这里解释了这个错误和解决方法: https://devforums.apple.com/message/731764

这是发生因为应用程序只想要横向但一些可可触摸视图控制器需要严格的纵向方向是错误 - 不是他们应该需要更多的则肖像但它们的应用要求解释。

这样的一个例子可以是以下:

iPad应用程序支持横向仅显示经由UIPopoverController一个的UIImagePickerController。 在需要的UIImagePickerController纵向,但应用程序只能迫使景观。 错误和崩溃......

已报告有问题的其他框架包括游戏中心登录视图控制器。

解决方法是很简单,但不理想......你让你的info.plist /项目信息窗格中宣布了正确的方向,但在应用程序委托类,你宣布你允许所有的方位。

现在每个视图控制器添加到窗口必须指定本身,它只能是景观。 请检查链接了解更多详情。


我不能强调多少,你不应该继承UIImagePickerController为接受的解决方案是坚持这样做。

这里最重要的是“ 这个类是为了被原样使用,不支持子类 。”


在我来说,我已将此添加到我的应用程序的委托(我有一个景观唯一的应用程序),这告诉影像选择器可显示,因为肖像支持:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
    return UIInterfaceOrientationMaskAll;
}

然后在这正好是一个我的视图控制器UINavigationController ,我包含在以下类别:

- (NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskLandscape;
}

现在,我的应用程序不旋转,图像拾取询问委托,如果它可以显示为肖像和它被告知,没关系。 因此,所有发挥出很好。



Answer 2:

我有一个类似的问题,但在一个iPad应用程序的景观。 我,将图像拾取的酥料饼。 它坠毁的iOS 6下的错误建议,拾取想要的肖像,但应用程序只提供横向视图,并... ...重要的机械手的shouldRotate返航YES。

我说这个我ViewControllerClass.m考虑创建选择器

@interface NonRotatingUIImagePickerController : UIImagePickerController

@end

@implementation NonRotatingUIImagePickerController

- (BOOL)shouldAutorotate
{
    return NO;
}

@end

然后使用这个类来代替

UIImagePickerController *imagePicker = [[NonRotatingUIImagePickerController alloc] init];
[myPopoverController setContentViewController:imagePicker animated:YES];

这解决了这个问题对我来说。 你的情况是有点不同,但它听起来像是从根本上相同的错误。



Answer 3:

虽然继承的UIImagePickerController的作品,一类是更好的解决方案:

    @implementation UIImagePickerController (NonRotating)

    - (BOOL)shouldAutorotate
    {
        return NO;
    }

    -(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
    {
        return UIInterfaceOrientationPortrait;
    }

    @end


Answer 4:

从iOS的7.1报告:

除了上述的答案说明什么,似乎你必须绝对能够在info.plist中肖像模式。

如果没有这个没有上面的代码/修复为我工作。



Answer 5:

-(NSUInteger)supportedInterfaceOrientations
{
   return UIInterfaceOrientationMaskLandscape;
}

将修复从iOs7问题,但



文章来源: Crash on presenting UIImagePickerController under iOS 6.0