Recentemente ho provato a lavorare con MainStoryboard.storyboard in Xcode e finora sta andando piuttosto bene e mi chiedo perché non l'ho mai usato prima. Mentre giocavo con un codice ho incontrato un ostacolo e non so come risolvere questo problema.Storyboard e personalizzazione init
Quando ho alloc e init un nuovo ViewController (con un init personalizzato ho dichiarato nella classe ViewControllers) vorrei fare qualcosa di simile:
ViewController *myViewController = [[ViewController alloc] initWithMyCustomData:myCustomData];
Poi, dopo che avrei potuto fare qualcosa di simile:
[self presentViewController:myViewController animated:YES completion:nil];
Quando lavoro con uno storyboard, ho imparato che passare a un ViewController standalone richiede un identificatore.
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
ViewController *myViewController = [storyboard instantiateViewControllerWithIdentifier:@"MyViewControllerIdentifier"];
[self presentViewController:myViewController animated:YES completion:nil];
Come posso ancora utilizzare l'inizializzazione personalizzata per myViewController mentre si utilizza uno storyboard?
è ok per fare proprio qualcosa di simile:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
ViewController *myViewController = [storyboard instantiateViewControllerWithIdentifier:@"MyViewControllerIdentifier"];
myViewController.customData = myCustomData;
[self presentViewController:myViewController animated:YES completion:nil];
//MyViewController.m
- (id) initWithMyCustomData:(NSString *) data {
if (self = [super init]) {
iVarData = data;
}
return self;
}
Grazie. Sembra strano che Apple non fornisca un modo per creare un metodo 'init' personalizzato con gli Storyboard. – jowie
Non sono sicuro del perché uno dovrebbe dichiarare: "Se tutto il tuo metodo initWithCustomData fa impostare una variabile di istanza, dovresti semplicemente impostarla manualmente (non sono richiesti personalizzazioni o metodi aggiuntivi)". Non ci sono documenti di Apple che affermano che quindi consiglierei a qualsiasi lettore di considerare questa affermazione come una semplice opinione e non come una regola da seguire. Un sacco di inizializzatori in iOS prendono anche solo un argomento. – zumzum
@zumzum Apple usa la pratica di impostare le variabili nel metodo 'prepareForSegue: sender:' nel loro codice di esempio. Vedere il file "AddTimedReminder.m" in [EKReminderSuite] (https://developer.apple.com/library/prerelease/ios/samplecode/EKReminderSuite/Introduction/Intro.html#//apple_ref/doc/uid/TP40015203- Intro-DontLinkElementID_2) esempio di progetto per un esempio. –