2012-12-04 2 views
4
-(void)viewDidLoad 
{ 
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) 
    { 
     imagePicker = [[UIImagePickerController alloc] init]; 
     imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 
     imagePicker.showsCameraControls = NO; 
     [self.view addSubview:imagePicker.view]; 
     } 
     else 
     { 
     // UIAlertView… 
     } 
} 

    -(void)viewDidAppear:(BOOL)animated 
    { 
     [super viewDidAppear:animated]; 
     imagePicker.delegate = self; 
     [self presentViewController:imagePicker animated:NO completion:NO]; 
    } 

카메라가 없을 때 경고를 보내고 싶습니다. iPhone 앱이 실행되고이 코드로 이동합니다. 그러나, 충돌 (이 오류> 시뮬레이터에서 실행UIImagePickerController, 카메라 검사

return UIApplicationMain(argc, argv, nil, NSStringFromClass([CameraAppDelegate class])); > Thread 1: signal SIGABRT).

는 왜?

+0

디버거 출력을 확인하고 중단 점 패널에 '모든 예외'중단 점을 추가하고 다시 시도하십시오. 이 오류에 대해 자세히 알려야합니다. – rckoenes

+0

해당 코드를 viewWillAppear에 작성하고 –

+0

을 확인하십시오. 많은 조언을 부탁드립니다. 그리고, 내 좋은 영어 ('· ω ·')에 대한 미안. – onion

답변

7

사용이 코드이며

if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) 
    { 
     UIImagePickerController* picker = [[UIImagePickerController alloc] init]; 
     picker.sourceType = UIImagePickerControllerSourceTypeCamera; 
     picker.delegate = self; 
     picker.wantsFullScreenLayout = YES; 
     [self presentModalViewController:picker animated:YES]; 
    } 
    else 
    { 
     UIAlertView *altnot=[[UIAlertView alloc]initWithTitle:@"Camera Not Available" message:@"Camera Not Available" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
     altnot.tag=103; 
     [altnot show]; 
     [altnot release]; 

    } 
3

만들기 .h 파일에 NSObject의를 UIImagePickerControllerDelegate 대리인을 추가 클래스 및 이름을 ClsGlobal 또는 원하는 이름으로 지정하십시오.

다음 ClsGlobal.h+(BOOL)isCameraDeviceAvailable을 작성하고 ClsGlobal.m에 아래 기능을 구현하십시오.

+(BOOL)isCameraDeviceAvailable 
{ 
    BOOL isCameraAvailable=NO; 
    if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) 
    { 
     if([UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront] || [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear]) 
      isCameraAvailable = YES; 
    } 
    return isCameraAvailable; 
} 

이 클래스 메서드를 사용하십시오. 사용 가능한 카메라가 있으면 NO를 반환하고 그렇지 않으면 NO를 반환합니다.

이제는 [ClsGlobal isCameraDeviceAvailable];을 사용하여이 메서드를 호출하면 조건이 if([ClsGlobal isCameraDeviceAvailable]) 인 모양을 의미합니다.

이 방법은 어떤 컨트롤러에서든 프로젝트 전체에서 도움이됩니다. 과 같은 ClsGlobal을 가져와야합니다.

+0

요즘 신고 해 주셔서 감사합니다. 미래에 댓글이어야하는 답변이 있으면 "대답하지 않음"으로 표시하십시오. 중재자가 그것을 효율적으로 처리하는 데 도움이됩니다. 감사! – casperOne

+0

@Mehul 클래스 메서드를 적용하는 데 문제가 있습니다. '+ (BOOL) isCameraDeviceAvailable; '이라고 선언하고'if ([self isCameraDeviceAvailable]) {....}'와 같이 사용하면됩니까?오류가 발생합니다.'Instance method '-isCameraDeviceAvailable'을 찾을 수 없습니다. (반환 유형의 기본값은 'id'입니다.) – zerowords

+0

아니요. self를 사용하여 클래스 메소드를 호출 할 수 없습니다. 클래스 이름을 사용하여 호출 할 수 있습니다. 설명해 드리겠습니다. 내 업데이트 답변보기 –

관련 문제