web-dev-qa-db-fra.com

Transmission de données d'un délégué d'application à View Controller

J'ai besoin de passer une chaîne du délégué de l'application à mon contrôleur de vue initial, quelqu'un peut-il m'a répertorié la meilleure façon de le faire, j'ai également essayé d'enregistrer et de récupérer en utilisant NS Valeurs par défaut de l'utilisateur, mais je ne le fais pas ne fonctionne pas correctement.

30
Alex

Interface:

@interface MyAppDelegate : NSObject  {
  NSString *myString;
}
@property (nonatomic, retain) NSString *myString;
...
@end

et dans le fichier .m du délégué d'application, vous écririez:

@implementation MyAppDelegate
@synthesize myString;
    myString = some string;
@end

Ensuite, dans le fichier viewcontroller.m, vous pouvez récupérer:

MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];
someString = appDelegate.myString;  //..to read
appDelegate.myString = some NSString;     //..to write
28
Skanda

Le voici pour Swift:

Afficher le contrôleur

let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate

De plus, si vous avez un objet que vous souhaitez passer entre les contrôleurs de vue (par exemple, j'avais des données CloudKit que je voulais partager) ajoutez-le à Délégué d'application:

    /* Function for any view controller to grab the instantiated CloudDataObject */
func getCloudData() ->CloudData{
    return cloudDataObject
}

Puis retournez dans le Afficher le contrôleur

var model : CloudData = self.appDelegate.getCloudData()
18
RyanPliske

Vous pouvez accéder à votre contrôleur de vue racine comme ceci à partir du délégué de l'application:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    MyViewController* mainController = (MyViewController*)  self.window.rootViewController;
    [mainController passData:@"hello"];

    return YES;
}
14
Odrakir

Utilisation de Swift 4.2:

Passage de données d'AppDelegate à ViewController:

let yourViewController = self.window?.rootViewController as? YourViewController
yourViewController?.passData(YOUR_DATA) // pass data
let data = yourViewController?.getData() // access data

Passage de données de ViewController à AppDelegate:

let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.passData(YOUR_DATA) // pass data
let data = appDelegate.getData() // access data

Ajoutez le code ci-dessous à YourViewController ou AppDelegate:

private var data : String? // String? or any type you want
func getData() -> String? {
    return data
}
func passData(_ data : String?) {
    self.data = data
}
2
Mu Sa