Objective c UISplitViewController:如何呈现popover?

Objective c UISplitViewController:如何呈现popover?,objective-c,ios,cocoa-touch,ipad,uisplitviewcontroller,Objective C,Ios,Cocoa Touch,Ipad,Uisplitviewcontroller,我有一个UISplitViewController,它是一个UISplitViewControllerDelegate,具有以下委托方法: splitViewController:willHideViewController:带BarbuttonItem:用于PopOvercontroller: 当iPad以纵向方式启动时,我希望SplitView中的Popover可见。我该怎么做 我尝试了以下代码: - (void)splitViewController:(UISplitViewControl

我有一个
UISplitViewController
,它是一个
UISplitViewControllerDelegate
,具有以下委托方法:

splitViewController:willHideViewController:带BarbuttonItem:用于PopOvercontroller:

当iPad以纵向方式启动时,我希望SplitView中的Popover可见。我该怎么做

我尝试了以下代码:

- (void)splitViewController:(UISplitViewController *)svc
     willHideViewController:(UIViewController *)aViewController
          withBarButtonItem:(UIBarButtonItem *)barButtonItem
       forPopoverController:(UIPopoverController *)pc
{
    //setting the barButtonItem in the toolbar in the detail view.

    [pc presentPopoverFromBarButtonItem:barButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:NO];
}
但是上面的代码给了我以下错误:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UIPopoverController presentPopoverFromRect:inView:permittedArrowDirections:animated::无法从没有窗口的视图中显示弹出窗口。”


只有一个问题,调用presentPopover方法的位置不对,即splitViewController:*WillHide*ViewController。。。。。。。所以,巴布托主义存在,但不出现在屏幕上。我使用了下一个代码,它对我有效。 要处理所有情况,你需要使用两种方法

- (void)viewDidAppear:(BOOL)animated
{
    if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait || [[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown) {
        if (self.view.window != nil) {
            [_masterPopoverController presentPopoverFromRect:CGRectMake(0, 0, 1, 1) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:NO];
        }
    }
    [super viewDidAppear:animated];
}


您将此代码放在代码的何处?我尝试过处理指向我的ViewController的PopoverController指针,但是当我想要显示popover时,它似乎被更改为nil。
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    if (fromInterfaceOrientation == UIDeviceOrientationLandscapeLeft || fromInterfaceOrientation == UIDeviceOrientationLandscapeRight) {
        if (self.view.window != nil) {
            [_masterPopoverController presentPopoverFromRect:CGRectMake(0, 0, 1, 1) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:NO];
        }
    }
}