0

ObjC プログラム フローを学習しました。これまでのところ、チェーンは main.m->UIApplicationMain->AppDelegate->ViewController で始まることがわかりました。

私が理解していない点は、ViewController 内のどのメソッドに AppDelegate クラスがフォーカスを移すかということです...

このトピックを理解することは非常に重要だと思いますので、明確化していただければ幸いです。

私はAppdelegate.mのこのコードを持っています -

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:     (NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.

MasterViewController *masterViewController = [[MasterViewController alloc] init];
self.navigationController = [[UINavigationController alloc] initWithRootViewController: masterViewController];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
return YES;

ViewController内にはこれらのメソッドがあります-

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
 [self.navigationController setNavigationBarHidden:YES animated: NO];
 }

- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear: animated];
}

および他の方法...

私の質問は

  1. AppDelegate が MasterViewController で制御を転送するメソッドはどれですか。また、MasterViewController がそのジョブを「終了」した後、または単にループされた後にコントロールが戻ってきますか?
  2. MasterViewController が初期化のために xib 名を取得する方法 (m ファイルと同じ名前ですか? つまり、どういう意味ですか - nibNameOrNil bundle:nibBundleOrNil)
  3. ナビゲーションコントローラーの関与が見られますが、ビューコントローラーにどのように接続されているかわかりません....

私の誤解を理解していただけましたら、ご説明いたしますので、今しばらくお待ちください。

4

1 に答える 1

0

(1) You're thinking about the logical flow in a procedural sort of way. The main run loop dispatches events down the responder chain. Your MasterViewController doesn't really 'finish'.

(2) The designated initializer for UIViewController is initWithNibName:bundle:. Your use of init here will not touch any associated nib file. If you wish to initialize MasterViewController from the nib, then you must use the designated initializer, e.g.

MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"your-nib-name-goes-here" bundle:nil];

nibNameOrNil and nibBundleOrNil are just parameter names for the method. It's a tip to you that they may be nil. Take a look at the documentation for how the method behaves when those params are nil.

(3) UINavigationController is a subclass of UIViewController that presents content hierarchically. In this case, the application's window's root view controller is a navigation controller. In turn, that navigation controller's root view controller is your MasterViewController instance.

The documentation for UINavigationController describes it well.

于 2013-08-25T12:35:07.487 に答える