>滑块视图 – 从底部打开,其中包含图标列表.基于选择图标,我必须在内容视图中加载视图控制器
>控制视图 – 屏幕左侧有几个按钮和文本
>容器视图 – 这涵盖了屏幕的大部分内容,我想根据滑块中的图标选择加载视图控制器
这就是我实现它的方式
在应用程序启动时(第一次),我通常在Container VIEw中加载主视图控制器,它具有包含应用程序相关项的表视图.每个视图控制器都在导航控制器内,我在容器视图中加载该导航控制器
当我在滑块视图中选择一个图标时,我正在加载一个视图控制器.
以下是我在名为ContentVIEwController的视图控制器中执行此 *** 作的代码:
- (voID) itemSelected: (UIVIEwController *) vIEwController{ // I am storing vIEw controller in a instance variable currentVIEwController. The currentVIEwController is declared as @property (nonatomic,strong) UIVIEwController *currentVIEwController under @interface in header file if(_currentVIEwController == nil) { // This part of code gets executed for the first time,when there is no vIEw controller available in ContainerVIEw _currentVIEwController = vIEwController; [self addChildVIEwController:_currentVIEwController]; [self.containerVIEw addSubvIEw:_currentVIEwController.vIEw]; } else if(_currentVIEwController != vIEwController) { // If a vIEw controller is already opened in Container VIEw and when I click a icon from the slIDer,this par of code is getting executed [self addChildVIEwController:vIEwController]; [self TransitionFromVIEwController:_currentVIEwController toVIEwController:vIEwController duration:0 options:UIVIEwAnimationoptionTransitionNone animations:^{} completion:^(BOol finished){ [_currentVIEwController removeFromParentVIEwController]; _currentVIEwController = vIEwController; [_currentVIEwController dIDMovetoParentVIEwController:self]; } ]; }}
上面提到的代码在iPad2和iPad3上工作正常,它们是32位设备.但是当我在iPad Air(64位设备)上运行此应用程序时,它会在TransitionFromVIEwController中崩溃,引发以下错误:
Terminating app due to uncaught exception 'UIVIEwControllerHIErarchyInconsistency',reason: 'child vIEw controller:<UINavigationController: 0x136d76130> should have parent vIEw controller:(null) but actual parent is:<ContentVIEwController: 0x136d39680>'*** First throw call stack:(0x183642950 0x19001c1fc 0x183642890 0x186688f00 0x18661484c 0x186613ff4 0x10009a224 0x1001104c8 0x18673d798 0x1867fe234 0x186692470 0x1865fe4a4 0x1836030a8 0x183600330 0x1836006bc 0x1835416d0 0x1891ddc0c 0x186672fdc 0x100058028 0x19060faa0)libc++abi.dylib: terminating with uncaught exception of type NSException
我尝试了各种选项,比如删除TransitionFromVIEwController并替换为以下代码:
[_currentVIEwController willMovetoParentVIEwController:nil]; [_currentVIEwController removeFromParentVIEwController]; _currentVIEwController = firstVIEw; [_currentVIEwController dIDMovetoParentVIEwController:self]; [self addChildVIEwController:_currentVIEwController]; [self.containerVIEw addSubvIEw:_currentVIEwController.vIEw];
但它在最后一行[self.containerVIEw addSubvIEw ….]中再次崩溃,并在iPad Air中提到了同样的错误.我不知道如何继续,我不知道为什么这个问题只发生在64位设备上.有人可以帮我这个.
提前致谢!
维涅什
解决方法 我可以通过更改代码来解决此问题.在上面的代码中,我将视图控制器添加为子视图控制器,并从父视图中删除了以前的视图控制器.该代码在非64位设备中运行良好,但在64位设备上运行不正常.所以我只是将视图控制器的视图添加到容器视图的子视图中,并从超级视图中删除了以前的视图控制器.以下是修改后的代码供参考:if(_currentVIEwController == nil){ _currentVIEwController = vIEwController; [self.containerVIEw addSubvIEw:vIEwController.vIEw];}else if(_currentVIEwController != vIEwController){ [_currentVIEwController.vIEw removeFromSupervIEw]; [self.containerVIEw addSubvIEw:vIEwController.vIEw]; _currentVIEwController = vIEwController;}
它适用于所有设备.
总结以上是内存溢出为你收集整理的64位iOS设备中的UIViewControllerHierarchyInconsistency全部内容,希望文章能够帮你解决64位iOS设备中的UIViewControllerHierarchyInconsistency所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)