【问题标题】:UIViewControllerHierarchyInconsistency worked in ios5 but not in ios6UIViewController Hierarchy Inconsistency 在 ios5 中有效,但在 ios 6 中无效
【发布时间】:2012-09-24 06:18:11
【问题描述】:

在我更新到 ios6 之前,我有一个完美的项目。

当我在一个栏项上按 Tab 以显示带有视图的弹出框时,应用程序崩溃了...

这是我遇到的错误

    "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 关联....这是怎么发生的???

希望您能在这个问题上提供帮助......整天都在坚持......

谢谢

【问题讨论】:

  • 我也遇到了同样的错误。我将范围缩小到从 UIView 到 EAGLView (EAGLView *eagl = (EAGLView *)self.view) 的演员表。我仍然不确定是什么原因造成的......
  • 我认为问题出在 UIPopoverController... 但是当我尝试对 UIViewController BookTestDrive 执行任何操作时,断点会在这些操作处停止.... 出了点问题... 我有不知道是什么
  • 升级到 ios 6 后对我来说同样的错误。'UIViewControllerHierarchyInconsistency',原因:'一个视图一次只能与一个视图控制器关联!查看 > 与 相关联。在将此视图与 .' 关联之前清除此关联
  • 我还没有想出如何解决这个问题...但我不得不忽略我创建的 nib 文件并通过代码而不是界面生成器创建该视图...并且它有效...但我仍然很想知道如何解决该错误。

标签: uiviewcontroller ios6 xcode4.5


【解决方案1】:

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

在解释 xib 文件时,iOS 6 的底层肯定发生了一些变化。

【讨论】:

  • 谢谢,我听从了您的建议...我删除了 xib 文件中的 ViewController,一切正常。很想知道为什么这在 ios 6 中发生了变化
【解决方案2】:

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];

不需要从控制器分配给视图(反之亦然)。

我建议您同时查看弹出框控制器和内容控制器,以查找控制器和视图之间的任何直接分配。

【讨论】:

  • 我会在界面生成器中查看您的 xib 文件,看看它是否同时包含视图和控制器。当您选择视图控制器并查看连接检查器时,应该存在与位于同一 xib 文件中的视图的连接。
  • 实际上对我有用的是我从 xib 文件中删除了视图控制器并且只有视图文件......然后一切正常。
猜你喜欢
  • 2012-10-06
  • 1970-01-01
  • 2013-05-29
  • 2014-11-28
  • 1970-01-01
  • 1970-01-01
  • 2015-01-28
  • 2011-03-30
  • 2011-02-14
相关资源
最近更新 更多