переход: странность целевого контроллера представления

В своем приложении я использую раскадровку и переходы, и я часто передаю данные целевому контроллеру представления перед выполнением переход следующим образом:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{
    if ([segue.destinationViewController respondsToSelector:@selector(setMyData:)]) {
        [segue.destinationViewController performSelector:@selector(setMyData:) 
                                          withObject:myData];
    }
} 

Он работает везде, кроме одного места. Селектор вызывается, данные устанавливаются, но когда переход завершается и появляется контроллер назначения, у него нет данных, которые я только что установил.После печати идентификатора контроллера представления как в исходном, так и в целевом контроллерах представления я обнаружил, что segue.destinationViewControllerв приведенном выше коде является ДРУГИМ экземпляром контроллера представления, чем тот, который отображается. Что здесь происходит?

[ОБНОВЛЕНИЕ 1] Я изучил жизненный цикл целевого контроллера представления, и он сначала загружается во время выполнения перехода, но ПОСЛЕ того, как я установил для него свойство! Это означает, что когда я вызываю PerformSelectorна нем, объект контроллера представления не инициализируется! Вот почему данные, которые я установил, не сохраняются. Я не понимаю, почему это так и почему этот же подход работает в других частях моего приложения.

[ОБНОВЛЕНИЕ 2] Выкладываю код setMyDataпо запросу. Сначала у меня вообще не было этого метода, потому что locationToOpen— публичное свойство. Я добавил его только для того, чтобы убедиться, что он вызывается, и чтобы распечатать информацию об отладке.

- (void)setMyData:(MyData *)myData
{
    DLog(@"self: %@", (id)self);
    _myData = myData;
}
7
задан Macondo2Seattle 8 December 2013 в 19:32
поделиться