2012-05-24 88 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 

     } 
    }]; 
}