【问题标题】:UIImagePickerController,Check cameraUIImagePickerController,检查相机
【发布时间】:2012-11-21 20:43:33
【问题描述】:
-(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 应用程序启动并移入此代码。 但是,崩溃(此错误>

return UIApplicationMain(argc, argv, nil, NSStringFromClass([CameraAppDelegate class])); > Thread 1: signal SIGABRT) 在模拟器中运行时。

这是为什么?

【问题讨论】:

  • 检查调试器输出,在断点面板中添加All Exceptions断点,然后重试。这应该会告诉您更多有关所引发错误的信息。
  • 请在 viewWillAppear 中编写该代码并检查
  • 感谢您的很多建议。还有,对不起我的英语不好(´·ω·`)
  • - (void)viewDidLoad { [super viewDidLoad]; if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { imagePicker = [[UIImagePickerController alloc] init];
  • imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; imagePicker.showsCameraControls = 否; [self.view addSubview:imagePicker.view]; imagePicker.delegate = 自我; [self presentViewController:imagePicker Animation:NO completion:NO]; }

标签: iphone ios xcode uiimagepickercontroller


【解决方案1】:

使用此代码并在.h 文件中添加UIImagePickerControllerDelegate 委托

 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];

    }

【讨论】:

    【解决方案2】:

    创建 NSObject 类并将其命名为 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;
    }
    

    使用这个类方法,如果相机可用则返回YES,否则返回NO。

    现在您可以使用 [ClsGlobal isCameraDeviceAvailable]; 调用此方法,这意味着您的 if 条件看起来像 if([ClsGlobal isCameraDeviceAvailable])

    此方法将帮助您在任何控制器中完成整个项目,您只需像 #import "ClsGlobal.h" 一样导入 ClsGlobal。

    【讨论】:

    • 感谢您最近的举报努力。将来,如果您看到应该是评论的答案,只需将其标记为“不是答案”;它可以帮助版主更有效地处理它。谢谢!
    • @Mehul 我无法应用您的类方法。我是否这样声明它:+ (BOOL)isCameraDeviceAvailable;,然后以这种方式使用它if([self isCameraDeviceAvailable]){ ....}?我收到错误Instance method '-isCameraDeviceAvailable' not found (return type defaults to 'id')
    • 不,亲爱的你不能用self调用类方法,你可以用类名来调用它。让我解释一下。。看我更新的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    相关资源
    最近更新 更多