[self performSegueWithIdentifier:@"popvc2id" sender:self];
を呼び出した後、私のViewController2
はawakeFromNib
メソッドで初期化されます。ViewControllerのシングルトンオブジェクトを作成する
私はstoryboard
私はそれをどのように行うことができますを使用してsingleton object of ViewController2
を作成したいですか?
[self performSegueWithIdentifier:@"popvc2id" sender:self];
を呼び出した後、私のViewController2
はawakeFromNib
メソッドで初期化されます。ViewControllerのシングルトンオブジェクトを作成する
私はstoryboard
私はそれをどのように行うことができますを使用してsingleton object of ViewController2
を作成したいですか?
私はこれが良い習慣だとは思わない。 しかし、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;
}
ここSyncViewController
は私のシングルトンのViewControllerです。私は現在の同期の進捗状況を表示する必要があるので、ユーザーが同期の進捗状況を見たい時に毎回ViewControllerを初期化する必要はありません。
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];
あなたはシングルトンするVCが必要になるのはなぜ? – Tander
私の義務 –
はい、なぜですか? VCはシングルトンになるようには設計されておらず、これはシングルトンパラダイムの乱用のように聞こえます。あなたがやろうとしていることをやり遂げるには良い方法があります。 – Tander