Passing Data from App delegate to View Controller

喜你入骨 提交于 2019-12-17 18:22:14

问题


I need to Pass an string from App delegate to my Initial View Controller , Can somebody listed me the best way to do it , also i tried to Save and Retrieve using NS user Defaults, but i doesn't work out properly .


回答1:


Interface:

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

and in the .m file for the App Delegate you would write:

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

Then, in viewcontroller.m file you can fetch:

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



回答2:


Here it is for Swift:

View Controller

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

Furthermore, if you have an object that you want to pass between view controllers (for example, I had CloudKit data I wanted to share) add this to the App Delegate:

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

Then back in the View Controller

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



回答3:


You can access your root view controller like this from the app delegate:

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

    return YES;
}



回答4:


Using Swift 4.2:

Passing Data from AppDelegate to ViewController:

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

Passing Data from ViewController to AppDelegate:

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

Add below code to YourViewController or AppDelegate:

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


来源:https://stackoverflow.com/questions/15049924/passing-data-from-app-delegate-to-view-controller

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!