2012-09-24 41 views
4

我有一个完美的工作项目,直到我更新到ios6。UIViewControllerHierarchyInconsistency在ios​​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整天吧..

感谢

+0

我刚刚得到了同样的错误。我将其缩小到我的从UIView到EAGLView(EAGLView * eagl =(EAGLView *)self.view)的阵容。我仍然不确定是什么原因造成了这个...... – Diamondo25

+0

我认为这个问题与UIPopoverController有关......但是当我试图用UIViewController BookTestDrive做任何动作时,断点就停在这些动作上....一些错误。 ..并且我不知道它是什么 – hsn

+0

升级到ios 6后,对我来说同样的错误。'UIViewControllerHierarchyInconsistency',原因:'一个视图最多只能与一个视图控制器关联!查看>与关联。在将此视图与关联之前清除此关联。 –

回答

2

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

在解释xib文件时,iOS 6中的某些东西一定会发生变化。

+0

谢谢,我遵循你的建议...我删除了xib文件中的ViewController,一切正常。想知道为什么这是改变了ios 6 – hsn

+0

真棒很高兴听到:) –

-1

iOS 6稍微改变了视图/控制器的处理。这在我的应用中用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控制器和内容控制器来查找控制器和视图之间的任何直接分配。

+0

这不工作....当我尝试它的nibviews数组只包含1项。 – hsn

+1

我会在界面构建器中查看您的xib文件,并查看它是否包含位于其中的视图和控制器。当您选择视图控制器并查看连接检查器时,应该连接到位于同一个xib文件中的视图。 – TakMan

+0

实际上,对我而言,是我从xib文件中删除了视图控制器,只有视图文件...然后一切正常。 – hsn

相关问题