Ios 在应用程序中重新访问同一UIViewController

Ios 在应用程序中重新访问同一UIViewController,ios,objective-c,Ios,Objective C,比如说,我有一个基于UITabBarController的应用程序,它有两个选项卡,VC A和B。我有VC X,它将在整个应用程序中使用,无论是推送还是以模式呈现。VC A是一个pageViewController,它将显示VC X和VC C,VC B是一个UITableView,如果按下,其中一个单元格将转到VC X(按下)。VC X状态需要保留,就好像我在VC A上打开它,然后选择某个东西,当我通过VC B打开它时,它将显示相同的状态。到目前为止,我所做的是将VC X作为一个单例,它将在任何

比如说,我有一个基于UITabBarController的应用程序,它有两个选项卡,VC A和B。我有VC X,它将在整个应用程序中使用,无论是推送还是以模式呈现。VC A是一个pageViewController,它将显示VC X和VC C,VC B是一个UITableView,如果按下,其中一个单元格将转到VC X(按下)。VC X状态需要保留,就好像我在VC A上打开它,然后选择某个东西,当我通过VC B打开它时,它将显示相同的状态。到目前为止,我所做的是将VC X作为一个单例,它将在任何地方使用

static XViewController *sharedInstance;

+ (XViewController *)sharedInstance
{
    static dispatch_once_t once;
       dispatch_once(&once, ^{
         sharedInstance= [[XViewController alloc]init];
     });
    return sharedInstance;
}
呼叫VCX:

XViewController *viewController = [XViewController sharedInstance];
问题是当我从VC A打开VC X,然后从VC B打开VC X,返回并从VC A打开VC X时,视图将为空,当我选择VC C并选择VC X时,它将再次显示


所以问题是我应该采取什么方法来解决这个问题或者实现我想要的?谢谢

您的单例方法应该有效。在VC A中,您是否以某种方式初始化VC X,而在VC B中,您获得一个引用并使用现有的VC X


如果你不想使用单例,你可以让VC X知道如何通过让控制器在控制器的
ViewDidEnglishe()
和/或
deinit

上保存任何需要的值来重建自己,这似乎是我的方法已经起作用并且正确了,但是,当我从VC B中推出VC X后,尝试显示VC X时,我错过了一些东西。因为在VC A中,我使用了PageViewController,然后在其根视图上将出现,我需要重新设置正在显示的viewController

[self.pageController setViewControllers:@[self.viewControllers[self.lastIndex]] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

就这样,一切按预期进行。:)

嗨,在VC A中,我没有重新初始化。如果我第一次从VC A打开X,它将被初始化。如果可能的话,我会尽量避免保存值,因为重用viewController的目的很明确。