我正在尝试构建我的应用程序,有一次我推了一个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属性.
当我希望设置滚动视图出现在弹出窗口中时,出现了同样的错误。
这是我的原始代码,其中包含有关我为解决该问题所做的更改的注释:
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 或代码中的其他地方也发生了类似的事情。难道真的是这样吗?
| 归档时间: |
|
| 查看次数: |
16638 次 |
| 最近记录: |