ナビゲーションベースのアプリケーションテンプレートに基づくプロジェクトがあります。 AppDelegateには、メソッド-applicationDidFinishLoading:
および-applicationWillTerminate:
があります。これらのメソッドでは、アプリケーションデータを読み込んで保存し、インスタンス変数に格納しています(実際にはオブジェクトグラフです)。
アプリケーションがロードされると、MainWindow.xibがロードされます。MainWindow.xibにはNavigationConrollerが含まれており、これにはRootViewControllerが含まれています。 RootViewController nibName
プロパティは、RootView(私の実際のコントローラークラス)を指します。
私のクラスでは、-applicationDidFinishLoading:
メソッドで作成したオブジェクトを参照したいので、参照を取得できます。
誰もそれを行う方法を教えてもらえますか?プログラムで作成したオブジェクト間を参照する方法は知っていますが、中間ステップがNIBファイル内で行われたため、戻る方法を理解できないようです。
アプリ内のどこからでもアクセスする必要がある変数(通常はモデルデータ構造)については、AppDelegateクラスで変数を宣言します。参照する必要がある場合:
YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];
//and then access the variable by appDelegate.variable
あなたの質問を理解したら、AppDelegateオブジェクトのメンバー変数/プロパティを参照したいですか?最も簡単な方法は、[[UIApplication sharedApplication] delegate]を使用してオブジェクトへの参照を返すことです。
Windowというプロパティがある場合、これを行うことができます。
UIWindow *mainWindow = [[[UIApplication sharedApplication] delegate] window];
//do something with mainWindow
IOS4.0以降の、明確に定義されたポータブルな代替手段を次に示します。
UIApplication *myApplication = [UIApplication sharedApplication];
UIWindow *mainWindow = [myApplication keyWindow];
UIViewController *rootViewController = [mainWindow rootViewController];
または、1行で、
UIViewController *rootViewController = [[[UIApplication sharedApplication] keyWindow] rootViewController];
ウィンドウのrootViewController
プロパティ(IBなど)を設定することを忘れないでください。そうしないと、ジャッキが実行されます。
#define appDelegateShared ((AppDelegate *)[UIApplication sharedApplication].delegate)
私のコードで:-
UIViewController *rootViewController = appDelegateShared.window.rootViewController;