UIViewControllerHierarchyInconsistency

BDG*_*pps 15 ios

我正在尝试构建我的应用程序,有一次我推了一个UIViewController然后我得到了这个错误.我不确定为什么.

'UIViewControllerHierarchyInconsistency',原因:'视图一次只能与一个视图控制器关联!视图>与...相关联.在将此视图与.关联之前清除此关联.

PageViewController *viewController;

viewController = [[PageViewController alloc] initWithManagedObjectContext:managedObjectContext];
dataSource = [[PagesDataSource alloc] initWithManagedObjectContext:managedObjectContext];

PVPage *selectedPage = [[dataSource pages] objectAtIndex:itemIndex];
[viewController setRepresentedPage:selectedPage];

PageFlipperAppDelegate *appDelegate = (PageFlipperAppDelegate *)[[UIApplication sharedApplication] delegate];
[(UINavigationController *)[[appDelegate window] rootViewController] setToolbarHidden:YES animated:YES];
[(UINavigationController *)[[appDelegate window] rootViewController] pushViewController:viewController animated:YES];
Run Code Online (Sandbox Code Playgroud)

在我的pageViewController ...................

- (id)initWithManagedObjectContext:(NSManagedObjectContext *)initManagedObjectContext
{
    if ((self = [super initWithNibName:@"PageView" bundle:nil]))
    {
        [self setManagedObjectContext:initManagedObjectContext];
        dataSource = [[PagesDataSource alloc] initWithManagedObjectContext:[self managedObjectContext]];
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

Mat*_* Mc 12

问题场景:如果在同一个.XIB文件中有两个UIViewControllers,其中视图出口指向同一视图,则在加载nib时会引发UIViewControllerHierarchyInconsistency异常,例如通过调用其中一个视图控制器上的.view属性.

  • 老兄,我爱你.感谢你的回答,我意识到我的问题是什么.我有一个带有`UITableView`作为子视图的`UITableViewController`,但是XIB的文件的所有者类是一个`UITableViewController`子类,所以我从XIB中删除了`UITableViewController`,然后离开了`UITableView` (3认同)

owe*_*nfi 1

当我希望设置滚动视图出现在弹出窗口中时,出现了同样的错误。

这是我的原始代码,其中包含有关我为解决该问题所做的更改的注释:

SettingsViewController *settingsViewController;
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];    
settingsViewController = [storyboard instantiateViewControllerWithIdentifier:@"Settings"];

CGRect contentRect = CGRectMake(10, 10, 320, 700);

// This entire object got deleted in the fixed version
UIViewController *popoverContent = [[UIViewController alloc] init];
popoverContent.view = settingsViewController.view;
popoverContent.contentSizeForViewInPopover = contentRect.size;

// Instead of popoverContent I just put the settingsViewController in directly.
UIPopoverController *popoverController = [[UIPopoverController alloc] initWithContentViewController:popoverContent];

[popoverController presentPopoverFromRect:[sender frame]
                                   inView:(UIButton*)sender
                 permittedArrowDirections:UIPopoverArrowDirectionLeft
                                 animated:YES];
Run Code Online (Sandbox Code Playgroud)

该行popoverContent.view = settingsViewController.view是导致崩溃的原因(如果没有它,我的弹出窗口当然是空的)。从 UIViewControllerHierarchyInconsistency 错误的角度来看,我不应该重新分配它然后将其添加到另一个视图控制器,这是有道理的。

在你的情况下,我猜想 PushViewController 或代码中的其他地方也发生了类似的事情。难道真的是这样吗?

  • 值得一提的是,这种情况从 DP4 开始才发生在我身上。 (4认同)