【问题标题】:Create a singleton object of ViewController创建 ViewController 的单例对象
【发布时间】:2017-03-07 01:27:21
【问题描述】:

调用[self performSegueWithIdentifier:@"popvc2id" sender:self];后我的ViewController2会通过awakeFromNib方法得到初始化。

我想使用storyboard 创建一个singleton object of ViewController2

我该怎么做?

【问题讨论】:

  • 为什么你需要一个 VC 才能成为单身人士?
  • 这是我的要求
  • 是的,但是为什么呢? VC 的设计不是单例,这听起来像是对单例范式的滥用。有更好的方法来做你想做的事情。
  • 我要防止VC再次初始化,我只想要一个实例

标签: ios objective-c uiviewcontroller singleton uistoryboard


【解决方案1】:

我认为这不是一个好习惯。 但是,如果您想要视图控制器中的一个实例,您可以在视图控制器中为视图提供一个标签,或者使用情节提要 id,然后您可以使用访问器方法访问它。 此访问方法为您初始化控制器并将其保存在字典中,下次您调用它时,它将为您返回保存的实例。

像这样:

+(yourviewcontrollerclassname *)getViewController{
    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    yourviewcontrollerclassname * vc;
    if (![_viewControllers containsObject:@"vc-identifier"]){
       vc = (yourviewcontrollerclassname *)[sb instantiateViewControllerWithIdentifier:@"vc-identifier"];
       [_viewControllers setObject:vc forKey:@"vc-identifier"];
    }else{
       vc = (yourviewcontrollerclassname *)[_viewController objectForKey:@"vc-identifier"];
    }
    return vc;
}

【讨论】:

    【解决方案2】:

    这里SyncViewController 是我的单例视图控制器。我需要显示当前的同步进度,所以当用户想要查看同步进度时,我不需要每次都初始化 ViewController。

    SyncViewController.m

    static SyncViewController *sharedInstance;
    

    以下是获取ViewController的sharedInstance的方法。

    + (SyncViewController *)sharedInstance
    {
        static dispatch_once_t once;
        dispatch_once(&once, ^{
    
            UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
            sharedInstance=[storyboard instantiateViewControllerWithIdentifier:@"SyncViewController"];
        });
        return sharedInstance;
    }
    

    从另一个视图控制器打开单例视图控制器:

        SyncViewController *syncVC=[SyncViewController sharedInstance];
        [self presentViewController:syncVC animated:YES completion:nil];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      • 2015-11-17
      相关资源
      最近更新 更多