UIViewControllerHierarchyInconsistency在ios​​5中工作,但在ios6中不工作

时间:2012-09-24 06:18:11

标签: uiviewcontroller ios6 xcode4.5

我有一个完美的工作项目,直到我更新到ios6。

当我选中一个条形项目以显示带有视图的弹出框时,应用程序崩溃...

这是我得到的错误

    "reason: 'A view can only be associated with at most one view controller at a time! View <UIView: 0xaa7d730; frame = (20 0; 748 1024); autoresize = RM+BM; layer = <CALayer: 0xaa7d790>> is associated with <TYOFormViewController: 0xaa7d8b0>. Clear this association before associating this view with <TYOFormViewController: 0x14c68a70>.'"

这是声明UIViewController和UIPopoverController的方法。

    - (IBAction)TestDriveTapped:(id)sender{
if (PopoverController != nil) {
    [PopoverController dismissPopoverAnimated:YES];
    self.PopoverController = nil;
}
if (self.PopoverController == nil) {
    UIViewController *bookTestDrive =[[TYOFormViewController alloc] initWithNibName:@"TYOBookTestDriveForm" bundle:nil];

   UIPopoverController *poc  = [[UIPopoverController alloc]
                           initWithContentViewController:bookTestDrive];

   [poc presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
     self.PopoverController = poc;
} else {
    if (PopoverController != nil) {
        [PopoverController dismissPopoverAnimated:YES];
        self.PopoverController = nil;
    }
}

}

错误说我必须清除与TYOFormViewController的关联才能将它与TYOFormViewController关联....这是怎么发生的?

非常感谢你对这个问题的帮助... jstuck整天都在用它......

由于

2 个答案:

答案 0 :(得分:2)

在加载一堆xib文件时,我也发生了这种情况。解决方案是进入界面构建器并删除与文件所有者具有相同类名的任何视图控制器对象。所以在我的情况下,这些文件现在只包含视图和子视图,连接到文件的所有者 - 没有控制器。

在解释xib文件时,iOS 6中的内容必定会发生变化。

答案 1 :(得分:-1)

iOS 6略微改变了View / Controllers的处理方式。这打破了我的应用程序中xib加载内容的弹出窗口,我得到了与你相同的错误。我发现我手动分配并初始化了我原始(破碎版本)中的视图控制器代码,然后手动将视图分配给它(实际上忽略了xib中的控制器)。在以前的iOS版本中工作得很好,但不是6.0。

我的修复是清理代码,摆脱手动视图控制器创建,让iOS从xib加载它。

  NSArray* nibViews =  [[NSBundle mainBundle] loadNibNamed:@"InfoView" owner:self options:nil];
  InfoView* infoView = [ nibViews objectAtIndex: 0];
  InfoViewController *infoViewController = [ nibViews objectAtIndex: 1];

不需要从控制器到视图的指定(反之亦然)。

我建议您浏览一下popover控制器和内容控制器,以查找控制器和视图之间的任何直接分配。