2016-10-25 9 views
0

[self performSegueWithIdentifier:@"popvc2id" sender:self];を呼び出した後、私のViewController2awakeFromNibメソッドで初期化されます。ViewControllerのシングルトンオブジェクトを作成する

私はstoryboard

私はそれをどのように行うことができますを使用してsingleton object of ViewController2を作成したいですか?

+0

あなたはシングルトンするVCが必要になるのはなぜ? – Tander

+0

私の義務 –

+0

はい、なぜですか? VCはシングルトンになるようには設計されておらず、これはシングルトンパラダイムの乱用のように聞こえます。あなたがやろうとしていることをやり遂げるには良い方法があります。 – Tander

答えて

0

私はこれが良い習慣だとは思わない。 しかし、View Controllerから1つのインスタンスが必要な場合は、View Controllerでビュー用のタグを指定するか、Storyboard 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; 
} 
0

ここSyncViewControllerは私のシングルトンのViewControllerです。私は現在の同期の進捗状況を表示する必要があるので、ユーザーが同期の進捗状況を見たい時に毎回ViewControllerを初期化する必要はありません。

のViewControllerのsharedInstanceを取得するための方法であり、以下の SyncViewController.m

static SyncViewController *sharedInstance; 

。別のビューコントローラから

+ (SyncViewController *)sharedInstance 
{ 
    static dispatch_once_t once; 
    dispatch_once(&once, ^{ 

     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
     sharedInstance=[storyboard instantiateViewControllerWithIdentifier:@"SyncViewController"]; 
    }); 
    return sharedInstance; 
} 

オープンシングルトンのViewController:

SyncViewController *syncVC=[SyncViewController sharedInstance]; 
    [self presentViewController:syncVC animated:YES completion:nil]; 
関連する問題