Ho bisogno di passare una stringa dal delegato App al mio controller di visualizzazione iniziale, Qualcuno mi ha elencato il modo migliore per farlo, inoltre ho provato a salvare e recuperare utilizzando i valori predefiniti dell'utente NS, ma non ho funzionato correttamente.Passaggio dei dati dall'app delegato a View Controller
risposta
Interfaccia:
@interface MyAppDelegate : NSObject {
NSString *myString;
}
@property (nonatomic, retain) NSString *myString;
...
@end
e nel file .m per l'App Delegato si può scrivere:
@implementation MyAppDelegate
@synthesize myString;
myString = some string;
@end
Poi, nel file di viewcontroller.m è possibile recuperare:
MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];
someString = appDelegate.myString; //..to read
appDelegate.myString = some NSString; //..to write
Questo post mi ha appena salvato la giornata. Grazie mille amico. – Avijit
La tua risposta dovrebbe contenere le lettere maiuscole: "Il mio metodo è pericoloso e cattiva pratica, perché rompe l'incapsulamento e crea uno stato globale". –
È possibile accedere al controller della vista radice in questo modo da e app delegato:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
MyViewController* mainController = (MyViewController*) self.window.rootViewController;
[mainController passData:@"hello"];
return YES;
}
Qui lo è per Swift:
View Controller
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
Inoltre, se si dispone di un oggetto che si desidera passare tra i controller di vista (ad esempio , Avevo dati CloudKit che volevo condividere) aggiungi questo al delegatario dell'app :
/* Function for any view controller to grab the instantiated CloudDataObject */
func getCloudData() ->CloudData{
return cloudDataObject
}
Poi di nuovo nel View Controller
var model : CloudData = self.appDelegate.getCloudData()
non è per qualche ragione. Il motivo è abbastanza esplicito in quanto lo scopo del delegato dell'app è di rispondere alle modifiche nello stato dell'app. Usarlo come una discarica per dati e costanti è una cattiva forma e porta ad una dipendenza da un oggetto che non è un cittadino contribuente nel paradigma MVC. – Tyten