performSegueWithIdentifier faileding presentPopoverFromBarButtonItem无法从没有窗口的视图中显示Popovers

时间:2012-04-28 22:04:38

标签: ipad ios5 storyboard

我有一个Master / Detail视图,可以通过storyboard segue打开一个弹出视图。主视图控制器的导航栏上有一个添加按钮,工作正常。

我添加了一个编辑模式,通过在编辑模式下选择表格单元格来调用相同的弹出窗口。它失败了[self performSegueWithIdentifier:@“addQuery”sender:self];声明。调用popover中的viewDidLoad,但之后抛出异常。

我没有调用presentPopoverFromBarButtonItem - 它似乎来自performSegueWithIdentifier。

毫无疑问,主视图控制器有一个窗口 - 单击该视图的表格单元格以启动失败的整个过程。

弹出窗口是导航控制器序列的开始,这可能是问题的一部分。当按钮真正调用它时,一切正常,只是尝试以编程方式调用它失败。

我尝试更改performSegueWithIdentifier的“sender”无效。

我怀疑问题与没有被按钮调用的segue有关,而且我不知道如何伪造它。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

ipad popover segue的工作方式似乎存在一些问题 - 请参阅Wayne Hartman's blog post

一个简单的测试显示viewWillAppear是在viewDidLoad之后调用的。

我想我理解这个问题......还没有解决问题。

调用方法的顺序是......

  1. [发起segue]
  2. viewDidLoad中
  3. prepareForSegue
  4. viewWillAppear中
  5. 我将初始化代码移到了viewWillAppear方法 - 它运行了。

    一般来说,我认为最好在viewWillAppear中初始化而不是viewDidLoad。

答案 1 :(得分:0)

我有一个类似的问题:

我正在使用UIDocumentInteractionController在Kaynote应用程序中打开一个kaynote文档。我使用相同的代码:

[docController presentOpenInMenuFromBarButtonItem:_actionBarButtonItem animated:YES];

上面的代码是从actiobBarButtonItem打开popover,其中包含我想用来打开文件的应用程序选项。如果我从DetailViewController得到同样的东西,我会得到与该帖子的作者相同的错误信息:“弹出窗口不能从没有窗口的视图中呈现”

我能够找到解决问题的快速解决方案。我不确定它是否与你的相关。我没有使用“presentOpenInMenuFromBarButtonItem”,而是使用了“presentOpenInMenuFromRect”,就是这样。你只需要定义popover到apear的正确位置