iOS - viewDidLoad вызывается ДО делегата didFinishLaunchingWithOptions? - PullRequest
2 голосов
/ 11 августа 2011

У меня есть приложение, которое работает как положено.

Однако я поместил одну точку останова в первую строку метода viewDidLoad моего rootViewController, а другую точку останова - в первую строку didFinishLaunchingWithOptions моего делегата,

Удивительно для меня, что приложение вошло в метод viewDidLoad, затем перешло к didFinishLaunchingWithOptions, а затем еще раз выполнило метод viewDidLoad.

Что происходит? Я думаю, что это поведение совершенно неправильно.

Заранее спасибо!

# отредактированный

Вот мой делегат из iPad, метод didFinishLaunchingWithOptions:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{   
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
    UtilXML *utilXML = [[UtilXML alloc] init];
    [utilXML startXMLCommunication];
    int quantidadeDeComicsBaixadas = [utilXML quantidadaDeComicsBaixadas];

    main_iPad *mainiPad = [[main_iPad alloc] init];
    mainiPad.quantidadeDeComicsBaixadas = quantidadeDeComicsBaixadas;
    mainiPad.navigationItem.title = @"TitleFirstScreen";

    UIBarButtonItem *botaoSobre = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:mainiPad action:@selector(goToAboutView)];
    mainiPad.navigationItem.rightBarButtonItem = botaoSobre;

    navController = [[UINavigationController alloc] initWithRootViewController:mainiPad];
    navController.navigationBar.tintColor = [UIColor orangeColor];
    navController.navigationBar.translucent = YES;


    [self.window addSubview:navController.view];
    [self.window makeKeyAndVisible];
    return YES;
}

А вот мой делегат из iPhone: метод didFinishLaunchingWithOptions:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[UIApplication sharedApplication] setStatusBarHidden:NO];

    UtilXML *utilXML = [[UtilXML alloc] init];
    [utilXML startXMLCommunication];
    int quantidadeDeComicsBaixadas = [utilXML quantidadaDeComicsBaixadas];

    main_iPhone *mainiPhone = [[main_iPhone alloc] init];
    mainiPhone.quantidadeDeComicsBaixadas = quantidadeDeComicsBaixadas;
    mainiPhone.navigationItem.title = @"TitleFirstScreen";

    UIBarButtonItem *botaoSobre = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:mainiPhone action:@selector(goToAboutView)];
    mainiPhone.navigationItem.rightBarButtonItem = botaoSobre;

    navController = [[UINavigationController alloc] initWithRootViewController:mainiPhone];
    navController.navigationBar.tintColor = [UIColor orangeColor];
    navController.navigationBar.translucent = YES;

    [self.window addSubview:navController.view];
    [self.window makeKeyAndVisible];
    return YES;
}

Это странное поведение наблюдается в обоих устройствах.

1 Ответ

8 голосов
/ 11 августа 2011

Документация для application:didFinishLaunchingWithOptions:

Вы должны использовать этот метод для инициализации вашей заявки и подготовки это для бега. Вызывается после запуска вашего приложения и загружен его основной файл пера . В то время этот метод называется, ваше приложение находится в неактивном состоянии. В какой-то момент после этот метод возвращает, последующий метод делегата вызывается для перемещения Ваше приложение в активном (переднем) состоянии или фоне состояние.

Таким образом, представление лениво загружается для контроллеров представления после вызова свойства или метода view. Когда это происходит, вызывается viewDidLoad, поэтому, если ваше свойство окна rootViewController установлено в ваш корневой ViewController в кончике, то это ожидаемое поведение.

...