84

Navigation Based Application テンプレートに基づくプロジェクトがあります。AppDelegate にはメソッド-applicationDidFinishLoading:-applicationWillTerminate:. これらのメソッドでは、アプリケーション データを読み込んで保存し、それをインスタンス変数 (実際にはオブジェクト グラフ) に格納しています。

アプリケーションが読み込まれると、MainWindow.xib が読み込まれます。これには、NavigationConroller があり、さらに RootViewController があります。RootViewControllernibNameプロパティは RootView (実際のコントローラー クラス) を指します。

私のクラスでは、-applicationDidFinishLoading:メソッドで作成したオブジェクトを参照して、参照を取得できるようにしたいと考えています。

誰でもその方法を教えてもらえますか? プログラムで作成したオブジェクト間を参照する方法は知っていますが、途中のステップが NIB ファイル内から行われたことを考えると、元に戻す方法がわからないようです。

4

4 に答える 4

204

アプリ内のどこからでもアクセスする必要がある変数 (通常はモデル データ構造) については、AppDelegate クラスで宣言します。参照する必要がある場合:

YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];
//and then access the variable by appDelegate.variable 
于 2008-10-24T03:14:31.407 に答える
16

あなたの質問が理解できたら、AppDelegate オブジェクトでメンバー変数/プロパティを参照しますか? 最も簡単な方法は、[[UIApplication sharedApplication] delegate] を使用してオブジェクトへの参照を返すことです。

window というプロパティがある場合は、次のようにすることができます。

UIWindow   *mainWindow = [[[UIApplication sharedApplication] delegate] window];
//do something with mainWindow
于 2008-10-23T23:51:59.443 に答える
11

Here's a well defined portable alternative for iOS4.0 and up:

UIApplication *myApplication = [UIApplication sharedApplication];
UIWindow *mainWindow = [myApplication keyWindow];
UIViewController *rootViewController = [mainWindow rootViewController];

or, in one line,

UIViewController *rootViewController = [[[UIApplication sharedApplication] keyWindow] rootViewController];

Don't forget to set the window's rootViewController property (say in IB) or this will do jack.

于 2011-02-27T11:13:34.117 に答える
2

マクロを定義して、どこでも使用できます!

#define appDelegateShared ((AppDelegate *)[UIApplication sharedApplication].delegate)

私のコードで: -

UIViewController *rootViewController = appDelegateShared.window.rootViewController;
于 2016-12-23T10:31:13.467 に答える