尝试加载UIImagePicker时出现popoverView错误

问题描述 投票:0回答:1

我正在尝试创建一个弹出式摄像头视图但是我收到此错误

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIPopoverController _commonPresentPopoverFromRect:inView:permittedArrowDirections:animated:]: Popovers cannot be presented from a view which does not have a window.'

我正在调用我的cameraViewController

- (void) cameraButtonSelected
{
    CameraViewController *cameraViewController = [[CameraViewController alloc] init];
    cameraViewController.view.frame = CGRectMake(100.0, 100.0, 200.0, 150.0);
    [self.view addSubview:cameraViewController.view];
}

这是我试图创建的ViewController viewDidLoad方法

- (void)viewDidLoad
{
    [super viewDidLoad];

    if(self.view.window!=nil)
        [objPopView presentPopoverFromRect:self.view.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.delegate = self;
    imagePicker.sourceType =  UIImagePickerControllerSourceTypeCamera;

    objPopView = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
    [objPopView presentPopoverFromRect:CGRectMake(842, 163, 0, 0)
                                inView:self.view
              permittedArrowDirections:UIPopoverArrowDirectionRight
                              animated:YES];
}
ios objective-c uiviewcontroller uiimagepickercontroller uipopovercontroller
1个回答
3
投票

我看到两个问题。

  • 你这么做太早了。 viewDidLoad意味着你的观点尚未出现在窗口中。它只是意味着视图存在。等到viewWillAppear:viewDidAppear:这样做。这是视图现在在界面中的标志。您可能必须使用条件才能在第一次执行此操作。
  • 这段代码真的很奇怪: if(self.view.window!=nil) [objPopView presentPopoverFromRect:self.view.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 你还没有定义objPopView,另外如果满足这个条件,你将对弹出窗口进行此演示,然后继续进行另一个弹出窗口的演示。
© www.soinside.com 2019 - 2024. All rights reserved.