viewDidLoad вызывается до завершения prepareForSegue

У меня сложилось впечатление, что viewDidLoad будет называться ПОСЛЕ ПОДГОТОВКИ ПОДГОТОВКИ ФОТОГРАФИИ Это то, как Хегарти преподает в своем классе в Стэнфорде (совсем недавно, в феврале 2013 года)

Однако сегодня я впервые заметил, что viewDidLoad назывался ДО того, как prepareForSegue было закончено. Поэтому свойства, которые я устанавливал в prepareForSegue, не были доступны для destinationViewController в методе destinationDidLoad.

Это противоречит ожидаемому поведению.

ОБНОВИТЬ

Я просто понял, что происходит. В моем destinationViewController у меня был пользовательский установщик, который будет перезагружать tableView каждый раз, когда "модель» был обновлен:

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

Оказывается, так как destinationViewController является подклассом UITableViewController ... вызываетself.tableView» заставляет вид загрузить. По словам Apple,Документация, вызывающая свойство view контроллера представления, может принудительно загрузить представление. Представление UITableViewController - это tableView.

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

Поэтому в prepareForSegue следующая строка принудительно загружала представление destinationViewController:

vc.managedObjectsArray = ;

Чтобы исправить проблему, я изменил пользовательский установщик destinationViewController 'с моделью для:

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

Это перезагрузит tableView, только если tableView находится на экране. Таким образом, не заставляя представление загружаться во время prepareForSegue.

Если кто-то возражает против этого процесса, пожалуйста, поделитесь своими мыслями. В противном случае, я надеюсь, что это предотвратит долгую бессонную ночь для кого-то.

Ответы на вопрос(4)

Ваш ответ на вопрос