Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
UIImagePickerController仅在iOS 7-iPad上崩溃_Ios_Ipad_Uiimagepickercontroller_Ios7 - Fatal编程技术网

UIImagePickerController仅在iOS 7-iPad上崩溃

UIImagePickerController仅在iOS 7-iPad上崩溃,ios,ipad,uiimagepickercontroller,ios7,Ios,Ipad,Uiimagepickercontroller,Ios7,自从人们开始升级到iOS 7以来,我的一个实时应用程序已经导致数百次崩溃。还有谁见过这个问题吗?在我的iPad3和iOS 7上没有任何内容可以复制 链接到Crashlytics: 致命异常CALayerInvalidGeometry CALayer位置包含NaN:[NaN NaN] 0 ... CoreFoundation uu例外预处理+130 2 CoreFoundation-[NSException initWithCoder:] 3夸脱核心CA::层::设置位置(CA::Vec2常

自从人们开始升级到iOS 7以来,我的一个实时应用程序已经导致数百次崩溃。还有谁见过这个问题吗?在我的iPad3和iOS 7上没有任何内容可以复制

链接到Crashlytics:

致命异常CALayerInvalidGeometry
CALayer位置包含NaN:[NaN NaN]
0 ...    CoreFoundation uu例外预处理+130
2 CoreFoundation-[NSException initWithCoder:]
3夸脱核心CA::层::设置位置(CA::Vec2常量和,布尔)+242
4夸脱芯-[CALayer设置位置:][54
5夸脱芯-[CALayer setFrame:+594
6 UIKit-[UIView(几何)设置帧:+254
7 UIKit-[UILabel setFrame:+138
8 UIKit-[UINavigationItemView initWithNavigationItem:+384
9 UIKit-[UINavigationItem _titleView]+92
10 UIKit-[UINavigationBar_prepareforpushanimation with items:][68
11 UIKit-[UINavigationBar推式导航项目:+292
12 UIKit-[UINavigationBar_pushNavigationItem:转换:][386
13 UIKit u_71-[UINavigationController pushViewController:转换:强制立即:][u块invoke+150
14 UIKit-[UINavigationController推视图控制器:转换:强制立即:+1384
15 UIKit-[UINavigationController按钮视图控制器:动画::+294
16 UIKit-[UIImagePickerController\u设置控制器ForCurrentSourceType]+112
17 UIKit-[UIImagePickerController设置源类型:][456
18 ...   libdispatch.dylib _dispatch _call _block _和_release+10
19 libdispatch.dylib_dispatch_client_callout+22
20 libdispatch.dylib_dispatch_main_queue_callback_4CF$VARIANT$mp+268
21 CoreFoundation\uuu CFRUNLOOP\u正在为\u主\u调度\u队列\uuu8提供服务
22 CoreFoundation\uuu CFRunLoopRun+1300
23 CoreFoundation CFRunLoopRunSpecific+522
24 CoreFoundation CFRunLoopRunInMode+106
25图形服务GSEventRunModal+138
26 UIKit UIApplicationMain+1136

我们共同得出结论,这是iPad iOS 7中的一个漏洞。首次尝试从UIBarButtonim在UIPopoverControl中显示UIImagePickerController时,会发生此错误。在用户授予其相册的权限后,会发生崩溃。目前的解决方案似乎是在打开UIPopoverControl之前请求对照片的许可。以下是我如何实施我的解决方案:

// Photo Library
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])
{
    void(^blk)() =  ^() {
        UIImagePickerController* picker = [[UIImagePickerController alloc] init];
        picker.delegate = self;
        picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        if (NIIsPad()) {
            UIPopoverController* popover = [[UIPopoverController alloc] initWithContentViewController:picker];
            [popover presentPopoverFromBarButtonItem:self.popoverAnchor permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
        } else {
            [self.navigationController presentModalViewController:picker animated:YES];
        }
    };

    // Make sure we have permission, otherwise request it first
    ALAssetsLibrary* assetsLibrary = [[ALAssetsLibrary alloc] init];
    ALAuthorizationStatus authStatus;
    if (IOS_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0"))
        authStatus = [ALAssetsLibrary authorizationStatus];
    else
        authStatus = ALAuthorizationStatusAuthorized;

    if (authStatus == ALAuthorizationStatusAuthorized) {
        blk();
    } else if (authStatus == ALAuthorizationStatusDenied || authStatus == ALAuthorizationStatusRestricted) {
        [[UIAlertView alertViewWithTitle:@"Grant photos permission" message:@"Grant permission to your photos. Go to Settings App > Privacy > Photos."] show];
    } else if (authStatus == ALAuthorizationStatusNotDetermined) {
        [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
            // Catch the final iteration, ignore the rest
            if (group == nil)
                dispatch_async(dispatch_get_main_queue(), ^{
                    blk();
                });
            *stop = YES;
        } failureBlock:^(NSError *error) {
            // failure :(
            dispatch_async(dispatch_get_main_queue(), ^{
                [[UIAlertView alertViewWithTitle:@"Grant photos permission" message:@"Grant permission to your photos. Go to Settings App > Privacy > Photos."] show];
            });
        }];
    }
}

别忘了将AssetsLibrary.framework添加到项目中。

我也遇到了同样的问题

我在
UIPopoverController
中显示了一个
UIImagePickerController
,大小由UIImagePickerController的contentSizeForViewInPopover函数定义。

为了解决此问题,我将
UIPopoverController
size更改为
UIImagePickerController的preferredContentSize
函数。

您可以使用自定义帧并按如下方式加载popover

[popOver presentPopoverFromRect:CGRectMake(self.view.frame.size.width-50, 50, 10, 10) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

我们不能让异常在测试中发生。我们只从Crashlytics知道它,并假设它从应用程序中崩溃了。我得到了同样的结果——让我们来比较一下。我假设这是从UIImagePickerController开始的。我使用它的相机和照片库访问。我怀疑这是在照片库访问期间由于导航栏的东西而崩溃的。我将图像选取器放在UIPopoverController中,并将其呈现给用户——也许这与此有关?我只在这个场景中得到了相同的结果:我第一次在iPad上从uibarbuttonitem中拿出库版本的选取器。系统要求用户授予访问照片库的权限。用户说是的,我得到以上崩溃。我得到这个问题时,显示iOS 7上的iPad上的UIImagePickerController从一个UIBarButtonim访问照片库。有人知道如何重置照片隐私以便再次显示照片隐私消息吗?建议的解决方法是调用ALAssetLibrary调用以获取缩略图图像或其他可以工作或导致对话框显示的内容。然后在回调的块中,显示图像选择器。仅供参考,我向苹果公司提交了一个bug,id 15077496kurtzmarc,谢谢你发布这个。我很惊讶它通过了苹果的QA…我在苹果的网站上找不到那个bug报告。它标记为私有吗?我看不到bug报告中任何地方可以切换public/privatenvm-你看不到其他人的bug报告(因此需要打开雷达)。我忘了。
[popOver presentPopoverFromRect:CGRectMake(self.view.frame.size.width-50, 50, 10, 10) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];