viewDidLoad chamado antes de prepareForSegue termina

Fiquei com a impressão de que viewDidLoad será chamado AFTER prepareForSegue termina. É assim que Hegarty ensina sua aula de Stanford (recentemente, em fevereiro de 2013).

No entanto, pela primeira vez hoje, notei que viewDidLoad foi chamado ANTES de prepareForSegue ter terminado. Portanto, as propriedades que eu estava configurando em prepareForSegue não estavam disponíveis para o destinationViewController no método viewDidLoad de destinos.

Isso parece contrário ao comportamento esperado.

ATUALIZAR

Eu só descobri o que estava acontecendo. No meu destinationViewController eu tinha um setter personalizado que iria recarregar o tableView cada vez que o "modelo" fosse atualizado:

DestinationViewController    
- (void)setManagedObjectsArray:(NSArray *)managedObjectsArray
    {
        _managedObjectsArray = [managedObjectsArray copy];
        [self.tableView reloadData];
    }

Acontece que, como o destinationViewController é uma subclasse do UITableViewController ... chamar 'self.tableView' força a visão a ser carregada. De acordo com a documentação da Apple, chamar a propriedade de exibição de um controlador de exibição pode forçar o carregamento da exibição. A exibição de um UITableViewController é o tableView.

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html

Portanto, em prepareForSegue, a seguinte linha estava forçando a exibição do destinationViewController para carregar:

vc.managedObjectsArray = <custom method that returns an array>;

Para corrigir o problema, alterei o setter personalizado do modelo destinationViewController para:

- (void)setManagedObjectsArray:(NSArray *)managedObjectsArray
    {
        _managedObjectsArray = [managedObjectsArray copy];
        if ([self isViewLoaded]) {
            [self.tableView reloadData];
        }
    }

Isso só recarregará o tableView se o tableView estiver na tela. Assim, não forçar a exibição para carregar durante o prepareForSegue.

Se alguém se opuser a este processo, por favor, compartilhe seus pensamentos. Caso contrário, espero que isso impeça uma noite longa e sem sono por alguém.

questionAnswers(4)

yourAnswerToTheQuestion