Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 与两个UINavigationController共享与rootViewController相同的UIViewController_Ios_Uiviewcontroller_Uinavigationcontroller_Uitabbarcontroller_Uistoryboard - Fatal编程技术网

Ios 与两个UINavigationController共享与rootViewController相同的UIViewController

Ios 与两个UINavigationController共享与rootViewController相同的UIViewController,ios,uiviewcontroller,uinavigationcontroller,uitabbarcontroller,uistoryboard,Ios,Uiviewcontroller,Uinavigationcontroller,Uitabbarcontroller,Uistoryboard,更新:我决定改变我的问题。 我没有尝试直接重用相同的UIViewController,而是使用两个设置为rootViewControllers的普通UIViewControllers。在他们的loadView方法中,他们调用[storyboard InstanceeviewController WithiIdentifier:以获取前一个UIViewController,并将其视图设置为控制器的视图。无论如何,这可能是首选方法,因为我需要设置几个变量和委托 我有一个UIStoryBoard,其中

更新:我决定改变我的问题。 我没有尝试直接重用相同的UIViewController,而是使用两个设置为rootViewControllers的普通UIViewControllers。在他们的loadView方法中,他们调用
[storyboard InstanceeviewController WithiIdentifier:
以获取前一个UIViewController,并将其视图设置为控制器的视图。无论如何,这可能是首选方法,因为我需要设置几个变量和委托


我有一个UIStoryBoard,其中一个uitabarcontroller作为入口点,与两个uinavigationcontroller相连。每个视图控制器共享一个公共的UIViewController作为其根视图控制器。当应用程序启动时,将选择第一个uitabaritem,并按预期加载视图。但是,当我选择第二个uitabaritem时,相同的视图不可见。我看到带有黑色背景的UINavigationBar。我是否对脚本界面做了一些不正确的事情,或者我是否需要通过每个UINavigationController的方法手动实例化UIViewController,例如loadView?

奇怪的是,这是一个没有人问的问题。据我所知,不可能共享rootViewController,我认为这毫无疑问是一个bug,因为当您检查故事板上的连接时,您可以看到视图控制器连接到两个导航控制器。我认为这是故事板中的一个缺陷,因为复制VIEW控制器和重新应用它们的所有连接是非常容易出错的,并且使得故事板过于复杂。

我看到你解决这个问题的办法了。像这样的解决方法让我怀疑iOS中当前的情节提要功能是否已经准备好创建应用程序。我认为故事板存在一个概念上的问题,苹果需要决定故事板上的viewController是代表一个实例,还是只代表一个类,现在它并不一致,因为你可以看到多个segue实际上可以指向同一个viewController,但实际上每个segue都有自己的实例,我不知道为什么rootViewController连接不遵循这一点

请注意,在使用您的解决方案时,请考虑苹果文档中的以下内容:

“重要信息视图控制器是其视图及其创建的任何子视图的唯一所有者。它负责创建这些视图,并在适当的时候放弃它们的所有权,包括在内存不足的情况下以及视图控制器本身被释放时。如果使用故事板或nib文件存储视图对象,则当视图控制器请求时,每个视图控制器对象都会自动获取这些视图的副本。但是,如果手动创建视图,则不应将同一视图对象与多个视图控制器一起使用。”


肯定是故事板中的一个bug。另一种方法是为每个
UINavigationController
创建基本的
UIViewController
,然后在每个基本视图控制器中都有一个指向相同
UIViewController
UIContainerView

我认为最简单的解决方案是不设置根在故事板中查看导航控制器的控制器,然后对导航控制器执行以下操作:

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIViewController *topVC = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"myTopVC"];
    [self pushViewController:topVC animated:NO];
}

第一个推动的VC变成了根。

这很有效,而且对我来说比其他解决方案更干净。遗憾的是,故事板中没有更好地支持VC重用。我同意这是一个bug。我同意这是一个bug!当然它应该实例化视图控制器的多个副本。遗憾的是,它没有。