ti-enxame.com

Passando dados do delegado do aplicativo para o View Controller

Eu preciso passar uma string do delegado do aplicativo para o meu controlador de exibição inicial. Alguém pode me listar a melhor maneira de fazer isso, também tentei salvar e recuperar usando NS padrões do usuário, mas eu não funcione corretamente.

30
Alex

Interface:

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

e no arquivo .m para o App Delegate, você escreveria:

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

Em seguida, no arquivo viewcontroller.m, você pode buscar:

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

Aqui está o Swift:

Ver Controlador

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

Além disso, se você tiver um objeto que deseja passar entre os controladores de exibição (por exemplo, eu tinha dados do CloudKit que gostaria de compartilhar), adicione-o ao App Delegate:

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

Em seguida, volte ao View Controller

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

Você pode acessar o seu controlador de exibição raiz como este no delegado do aplicativo:

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

    return YES;
}
14
Odrakir

Usando Swift 4.2:

Passando dados do AppDelegate para o ViewController:

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

Passando dados do ViewController para o AppDelegate:

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

Adicione o código abaixo ao 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