20

マスター/ディテール Xcode プロジェクトのデフォルト コードのスニペット


AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
 UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;  // *** here ***
    MasterViewController *controller = (MasterViewController *)navigationController.topViewController;
    controller.managedObjectContext = self.managedObjectContext;
    return YES;
}

AppDelegate.h

@property (strong, nonatomic) UIWindow *window;

@synthesize はアクセサー メソッドを設定するだけで、自動的に初期化が行われないことを認識しています。しかし、明示的に初期化されていない場合、どのようwindowに非 nil を持つのでしょうか? rootViewControllerこれは Xcode が舞台裏で初期化しているだけですか?

4

5 に答える 5

4

UIWindowドキュメントから:

注: ストーリーボードと Xcode アプリ テンプレートを使用してアプリを作成すると、ウィンドウが作成されます。

ストーリーボードを使用しない場合、ウィンドウは明示的に作成されますが、すべての標準プロジェクト テンプレートはそのまま使用できます。アプリのデリゲートに次のような行が表示されます。

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

ストーリーボードを使用すると、メインのストーリーボードが読み込まれるときにウィンドウがバックグラウンドで作成されます (詳細については、ビュー コントローラー プログラミング ガイドを参照してください)。

于 2013-05-08T16:43:07.657 に答える
2

Apple のドキュメントから (「アプリでのビュー コントローラーの使用」):

アプリのユーザー インターフェイスを初期化するメイン ストーリーボード

メイン ストーリーボードは、アプリの情報プロパティ リスト ファイルで定義されます。このファイルでメインのストーリーボードが宣言されている場合、アプリの起動時に iOS は次の手順を実行します。

ウィンドウをインスタンス化します。メインのストーリーボードをロードし、最初のビュー コントローラーをインスタンス化します。新しいビュー コントローラーをウィンドウの rootViewController プロパティに割り当ててから、ウィンドウを画面に表示します。

于 2013-05-08T16:42:42.887 に答える
1

ストーリーボードには、ドラッグできる小さな矢印があります。

矢印

代わりに xibs/nibs を使用していた場合は、[メイン インターフェイス] フィールドに入力されます。

インターフェース

結局のところ、そうです、これは iOS/Xcode の魔法です。

于 2013-05-08T16:36:33.190 に答える