Зачем нужен следующий код от Passing Data between View Controllers? :Зачем передавать данные между контроллерами View с помощью segue
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([segue.identifier isEqualToString:@"showDetailSegue"])
{
ViewControllerB *controller = (ViewControllerB *)segue.destinationViewController;
controller.isSomethingEnabled = YES;
}
}
Все, что я вижу, это то, что он создает экземпляр класса ViewControllerB. Я не понимаю, как этот экземпляр (контроллер) может быть фактическим ViewController, которым он передает эти данные? Какую концепцию мне не хватает?
О, я думаю, что получил. При создании этого контроллера я назначу ему адрес памяти segue.destinationViewController, который является ссылкой на фактический ViewController, к которому я передаю данные, поэтому контроллер фактически будет таким ViewController (потому что он указывает на тот же адрес, что и для segue. destinationViewController), правильно? –
При выполнении отступов, созданных в раскадровке (как в случае ~ 99% времени), вы не создаете _or_ назначать контроллер вида вообще - это делается для вас. Вы просто используете 'prepareForSegue: sender:' для конфигурирования («подготовить») этот контроллер просмотра. Чтобы облегчить это, ссылка на контроллер просмотра доступна для вас через переданный 'segue' (его свойство' destinationViewController'). Итак, в этом смысле вы правы - 'segue.destinationViewController' указывает на тот же адрес памяти, на который переводится фактический контроллер представления. – Stuart
ViewControllerB * контроллер = (ViewControllerB *) segue.destinationViewController; контроллер укажет на адрес segue.destinationViewController? Я спрашиваю об этом, потому что я только изменяю controller.isSomethingEnabled, а не segue.destinationViewController.isSomethingEnabled –