Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c UIPopoverController和UIImagePickerController崩溃_Objective C_Ios_Cocoa Touch_Ipad_Uipopovercontroller - Fatal编程技术网

Objective c UIPopoverController和UIImagePickerController崩溃

Objective c UIPopoverController和UIImagePickerController崩溃,objective-c,ios,cocoa-touch,ipad,uipopovercontroller,Objective C,Ios,Cocoa Touch,Ipad,Uipopovercontroller,以下是我的视图设置: 单击UIBarButtonim时,它应该会显示一个UIImagePickerController。我必须使用UIPopoverController来实现这一点,它可以通过点击重置按钮来调用,因为这在iPad上是必要的。这是我的密码: -(IBAction) btnReset:(id)sender { [self chooseImage]; } -(void) chooseImage { if ([UIImagePickerController isSour

以下是我的视图设置:

单击UIBarButtonim时,它应该会显示一个UIImagePickerController。我必须使用UIPopoverController来实现这一点,它可以通过点击重置按钮来调用,因为这在iPad上是必要的。这是我的密码:

-(IBAction) btnReset:(id)sender {
    [self chooseImage];
}

-(void) chooseImage {
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
        imagepicker = [[UIImagePickerController alloc] init];
        imagepicker.allowsEditing = NO;
        imagepicker.delegate = self;
        imagepicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        imagepicker.navigationBar.opaque = true;


        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
            popoverController = [[UIPopoverController alloc] initWithContentViewController:imagepicker];

            [popoverController presentPopoverFromBarButtonItem:reset permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];

        } else {
            [self presentModalViewController:imagepicker animated:YES];   
        }
    }
}
但是,调用此函数时,视图会崩溃,并出现以下错误:

“NSInvalidArgumentException”,原因:“-[UIPopoverController presentPopoverFromRect:inView:permittedArrowDirections:animated::无法从没有窗口的视图中显示PopOver。”


我做错了什么?提前感谢。

看起来您正在尝试在不在视图层次结构上的项目上创建popover。如果您的按钮正在调用此方法,请将方法标题更改为-void chooseImage:idsender,然后尝试从工具栏上的UIBarButton显示popover


此外,如果您使用的是ARC,看起来您是,您必须保持您的UIPover,否则它将在仍然需要时释放,请参阅。您可能已经在这样做了,但我想我会把它作为一个例子来提出来,我不知道您是否/如何指定了popoverController。

显示popover的重置变量是什么?重置是按钮的名称UIBarButtonim iAction只调用chooseImage方法,所以应该没问题。我不确定我在另一篇文章中应该有什么代码。我确实在头文件中创建了popOver并合成了它的属性。你看过这篇文章吗?下面的问题是你链接中的公认答案,效果最好。这并不完美,但我会让它工作的。