iPad应用程序在启动相机时崩溃

时间:2012-05-24 10:22:04

标签: iphone ios ipad qr-code ip-camera

我正在创建一个应用程序,我需要启动相机并扫描QR码。我正在使用扫描仪启动的课程。它在iPhone上很好但在iPad上崩溃了。     我正在使用代码

if(![[appDelegate.tabbarcontroller.viewControllers objectAtIndex:1] isMovingFromParentViewController]) { 
    [[appDelegate.tabbarcontroller.viewControllers objectAtIndex:1] popToRootViewControllerAnimated:NO];
}

2 个答案:

答案 0 :(得分:2)

在iOS中使用防御性编程是防止崩溃的一个非常好的策略。

关于您的问题,来自Apple doc:

  

要使用包含其默认控件的图像选择控制器,   执行以下步骤:

     

验证设备是否能够从所需内容中挑选内容   资源。这样做调用isSourceTypeAvailable:class方法,   从“UIImagePickerControllerSourceType”提供常量   枚举。

     

检查源类型的可用媒体类型   您正在使用,通过调用availableMediaTypesForSourceType:类   方法。这使您可以区分可以使用的相机   视频录制和仅可用于静止图像的视频。

Mugunth Kumar 提供的链接iphone-tutorial-better-way-to-check-capabilities-of-ios-devices提供了解决设备功能所需的信息。

希望它有所帮助。

答案 1 :(得分:0)

您可以使用以下代码检查AVAuthorization状态 使用媒体时。

/*
// Media types
AVF_EXPORT NSString *const AVMediaTypeVideo    NS_AVAILABLE(10_7, 4_0);
AVF_EXPORT NSString *const AVMediaTypeAudio    NS_AVAILABLE(10_7, 4_0);
AVF_EXPORT NSString *const AVMediaTypeText    NS_AVAILABLE(10_7, 4_0);
AVF_EXPORT NSString *const AVMediaTypeClosedCaption    NS_AVAILABLE(10_7, 4_0);
AVF_EXPORT NSString *const AVMediaTypeSubtitle    NS_AVAILABLE(10_7, 4_0);
AVF_EXPORT NSString *const AVMediaTypeTimecode    NS_AVAILABLE(10_7, 4_0);
AVF_EXPORT NSString *const AVMediaTypeMetadata    NS_AVAILABLE(10_8, 6_0);
AVF_EXPORT NSString *const AVMediaTypeMuxed    NS_AVAILABLE(10_7, 4_0);
*/

AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
if(status == AVAuthorizationStatusAuthorized)
{
    // authorized
    NSLog(@"authorized");
}
else if(status == AVAuthorizationStatusDenied)
{
    // denied
    NSLog(@"denied");
}
else if(status == AVAuthorizationStatusRestricted)
{
    // restricted
    NSLog(@"restricted");
}
else if(status == AVAuthorizationStatusNotDetermined)
{
    // not determined
    NSLog(@"not determined");

    [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
        if(granted){ // Access has been granted ..do something

        } else { // Access denied ..do something

        }
    }];
}