64位iOS设备中的UIViewControllerHierarchyInconsistency

64位iOS设备中的UIViewControllerHierarchyInconsistency,第1张

概述我正在开发一个iPad应用程序,它有一个视图控制器(称为ContentViewController),其中包含3个不同的视图. >滑块视图 – 从底部打开,其中包含图标列表.基于选择图标,我必须在内容视图中加载视图控制器 >控制视图 – 屏幕左侧有几个按钮和文本 >容器视图 – 这涵盖了屏幕的大部分内容,我想根据滑块中的图标选择加载视图控制器 这就是我实现它的方式 在应用程序启动时(第一次),我通 我正在开发一个iPad应用程序,它有一个视图控制器(称为ContentVIEwController),其中包含3个不同的视图.

>滑块视图 – 从底部打开,其中包含图标列表.基于选择图标,我必须在内容视图中加载视图控制器
>控制视图 – 屏幕左侧有几个按钮和文本
>容器视图 – 这涵盖了屏幕的大部分内容,我想根据滑块中的图标选择加载视图控制器

这就是我实现它的方式

在应用程序启动时(第一次),我通常在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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1041581.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存