2016-10-25 4 views
0

Nach dem Aufruf [self performSegueWithIdentifier:@"popvc2id" sender:self]; wird meine ViewController2 durch awakeFromNib Methode initialisiert werden.Erstellen Sie ein Singleton-Objekt von ViewController

Ich möchte ein singleton object of ViewController2 mit storyboard

Wie kann ich das tun schaffen?

+0

Warum würden Sie ein VC benötigen ein Singleton zu sein? – Tander

+0

Es ist mein Requirment –

+0

Ja, aber warum? VCs sind nicht als Singletons konzipiert und das klingt nach Missbrauch des Singleton-Paradigmas. Es gibt einen besseren Weg, um das zu tun, was Sie tun möchten. – Tander

Antwort

0

Ich denke nicht, dass dies eine gute Praxis ist. Aber wenn Sie eine Instanz von Ihrem View-Controller möchten, können Sie ein Tag für die Ansicht in Ihrem View-Controller angeben oder die Storyboard-ID verwenden und dann mit der Accessor-Methode darauf zugreifen. Diese Zugriffsmethode initialisiert den Controller für Sie und speichert sie im Wörterbuch und beim nächsten Aufruf wird die gespeicherte Instanz für Sie zurückgegeben.

wie folgt aus:

+(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

Hier SyncViewController ist mein Singleton Viewcontroller. Ich muss den aktuellen Synchronisierungsfortschritt anzeigen, sodass ich ViewController nicht jedes Mal neu starten muss, wenn der Benutzer den Synchronisierungsfortschritt sehen möchte.

in SyncViewController.m

static SyncViewController *sharedInstance; 

Es folgt das Verfahren sharedInstance von Viewcontroller zu erhalten.

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

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

öffnen Singleton Viewcontroller aus einer anderen View-Controller:

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