无法从没有窗口的视图中呈现popup窗口

这个错误表明:

 “从没有窗户的angular度来看,不能呈现出来。”

您添加popup窗口的视图必须已经添加到“addSubview:”方法的窗口中。

尝试等待

- (void) didMoveToWindow 

被调用的视图,然后加载popover

拯救了我的生命的东西:

 if (self.view.window != nil) [popoverController presentPopoverFromRect:CGRectMake(44, yCoord, 111, 111) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 

通过添加条件,它不会再崩溃了。 我不明白,因为presentPopoverFromRect函数总是被调用。 没有任何情况下,窗口将是零,但无论如何,它的伎俩。

编辑:我有这个代码viewDidAppear 。 尽pipe如此,在大多数情况下,将presentPopoverFromRect移动到viewDidAppeardidMoveToWindow就足够了,但在我的情况下,由于某些原因if条件是必要的。

我有这个问题。

我有一个UITabBarController作为详细视图,并且我将barButtonItem设置为标签栏中所有三个导航控制器上的leftBarButtonItem。

 vcChart.navigationItem.leftBarButtonItem = barButtonItem; vcAnalysis.navigationItem.leftBarButtonItem = barButtonItem; vcTechnicals.navigationItem.leftBarButtonItem = barButtonItem; 

只有最后一个join的是有效的,而前两个会在点击时抛出exception。

为了解决这个问题,我只为可见视图控制器设置了leftBarButtonItem,并且每当用户切换选项卡时,都将barButtonItem切换到可见视图控制器。

刚刚遇到这个问题。 原来inView:参数使用了IB中没有连接的IBOutlet。 因此,试图在零时间推出popover。 这是行不通的。

所以,请确保您使用有效的视图。

有很多方法可以解决这个错误。 基本上你需要等待调用presentPopover命令,直到你的调用视图被添加到一个窗口。 我这样做了。

 - (void)viewDidAppear:(BOOL)animated { [self methodThatDisplaysPopOver]; } 

我的presentPopoverFromRect调用是在我的methodThatDisplaysPopOver函数中。

你可以保护每个presentMobiMaciek拨打电话这个build议。

 if (self.view.window != nil) [popoverController presentPopoverFromRect:CGRectMake(10, 10, 100, 100) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 

不过,我认为最好能够明白self.view.window何时被赋值,并确保在视图有窗口后显示popup窗口。

与Lewis相同,将相同的UIBarButtonItem分配给多个导航项目时,我收到了相同的错误消息。 我的示例稍微复杂一点,因为我使用的是UISplitViewController

在我的RootViewController我有一个数组的数组来完成表中的多个部分。 每当用户单击表中的一行时,一个新的“细节”视图控制器被放置在我的splitViewController的右窗格中。 在设置leftBarButtonItem = nil ,我会在点击“菜单”button3-4次之后收到一个段错误,错误号为a111。 我更新我的代码,实际上检索以前的详细信息视图控制器,并将leftBarButtonItem项目设置为零。

allData是我的NSMutableArray,它包含几个其他的NSMutableArrays作为对象。

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // Retrieve the new detail view controller UIViewController *detailViewController = [[self.allData objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]; // Add the detail view controller to a navigation controller and set the bar style UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController]; detailNavigationController.navigationBar.barStyle = [[NSUserDefaults standardUserDefaults] integerForKey:@"UIBarStyle"]; // Retrieve previous detail view controller and remove the leftBarButtonItem UINavigationController *previousDetailNavigationController = [splitViewController.viewControllers objectAtIndex:1]; UIViewController *previousDetailViewController = [[previousDetailNavigationController viewControllers] lastObject]; previousDetailViewController.navigationItem.leftBarButtonItem = nil; // Update the split view controller's view controllers array. NSArray *viewControllers = [[NSArray alloc] initWithObjects:self.navigationController, detailNavigationController, nil]; splitViewController.viewControllers = viewControllers; [detailNavigationController release]; [viewControllers release]; // Dismiss the popover if it's present. if (popoverController != nil) { [popoverController dismissPopoverAnimated:YES]; } // This sets the left bar to nil when in landscape and equal to "Menu" when in portrait. // We need to remove rootPopoverButtonItem from the previous viewController... detailViewController.navigationItem.leftBarButtonItem = rootPopoverButtonItem; } 

错误信息起初有点欺骗,但上面的答案帮助我。 我想知道为什么我可以点击“菜单”button之前,在段错误前3-4次…我会进一步调查。

当inView:Parameter不正确时也会发生此错误 – 要testingtry self.view

是的,你是对的,但我们仍然可以从父类中添加子视图。 所以它可以用一个窗口来表示:

 [popoverController.contentViewController.view addSubview:mySubView]; 

我和OP有相同的错误信息,与TPoschel报告的情况非常相似,除了我在细节窗格中有一个带有embedded式标签栏控制器的分割视图控制器和一个导航控制器。 栏button项目被添加为导航栏leftBarButtonItem。

只有在iOS5.0(而不是5.1),它似乎要求您通过将其设置为无效将选项卡栏上的酒吧button项目无效。 在添加barbutton到选项卡上的导航栏之前,

如果我不这样做,从debugging我自己的代码,酒吧button项的窗口属性保持设置为零,并导致exception, 返回到您以前去过的屏幕。 我猜测是在导航项中设置leftBarButtonItem的副作用,它会closures并设置框架。 但是,除非button与当前设置的不同,否则它似乎没有什么麻烦。 因此,当离开一个标签时,需要将其设置为零,即使它在技术上与传递的button相同。

我会赞成TPoschel的答案,除了SO不会让我。

我有这样的问题。 收到此消息时,单击一个自定义的UIBarButton项目调用一个select器方法与performSeque。

问题是我的segue仍然附加到UIBarButton项目。 它应该被附加到视图控制器的主视图。 改变了这一点,工作正常。

PS,所有这一切都开始了,因为我想添加和“信息”button到我的UIToolBar 。 这不是系统提供的列表中的一个,应该是。

将有一个视图,你要求显示你的popup窗口。这个错误的原因是因为你没有把这个视图作为窗口的子视图。

  [self.view addSubview:displayPopOverVC]; 

其中displayPopOverVC是popOver出现的视图控制器

我有同样的问题,在viewDidAppear添加PresentPopOver后 ,这已经解决了

 - (void) viewDidAppear:(BOOL)animated{ CGRect popoverRect = screenBounds; popoverRect.size.width = MIN(popoverRect.size.width,0) ; popoverRect.origin.x = screenBounds.origin.x; [popoverController presentPopoverFromRect:popoverRect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; } 

这发生在inView中:self.view应该在@ hey68You和MobiMaciekbuild议的viewDidLoad之后调用。

我replace了

 [actionSheet showFromBarButtonItem:self.navigationController.navigationItem.leftBarButtonItem animated:YES]; 

 [actionSheet showInView:self.view];