web-dev-qa-db-ja.com

App DelegateからView Controllerにデータを渡す

文字列をApp Delegateから最初のView Controllerに渡す必要があります。誰かが私にそれを行うための最良の方法をリストできますか。また、NS user Defaultsを使用して保存して取得しようとしましたが、そうではありませんうまく動かない。

30
Alex

インターフェース:

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

app Delegateの.mファイルに次のように記述します。

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

次に、viewcontroller.mファイルでフェッチできます:

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

これはSwift用です:

View Controller

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

さらに、ビューコントローラー間で渡したいオブジェクトがある場合(たとえば、共有したいCloudKitデータがあった場合)、これをApp Delegateに追加します。

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

次にView Controllerに戻ります

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

アプリのデリゲートから次のようにルートビューコントローラーにアクセスできます。

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

    return YES;
}
14
Odrakir

使用Swift 4.2:

AppDelegateからViewControllerにデータを渡す:

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

ViewControllerからAppDelegateにデータを渡す:

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

YourViewControllerまたは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