2012-05-24 93 views
-2

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

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

和在这里发布一些代码呢? –

+2

...并且不要忘记在错误日志中发布错误:) – dasblinkenlight

+0

也许你会在第一款没有相机的iPad上试用? –

回答

2

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

关于你的问题,从苹果DOC:

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

验证设备能够从所希望的采摘内容的 来源。这是否调用isSourceTypeAvailable:类方法, 从“UIImagePickerControllerSourceType” 枚举中提供常量。

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

通过Mugunth库马尔链接iphone-tutorial-better-way-to-check-capabilities-of-ios-devices提供你需要checke对设备功能的信息。

希望它有帮助。

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 

     } 
    }]; 
}