我发现有关实现协议和委托的大多数信息都涉及到执行此操作的步骤;

   DestinationViewController *destinationVC = [[destinationViewController alloc] init];
   destinationVC.delegate = self;

但是在经历了数小时的挫折之后,由于无法正常工作,我最终偶然发现了另一种在prepareForSegue中分配destinationVC的方法
    DestinationViewController *destinationVC = segue.destinationViewController;
    destinationVC.delegate = self;

哪个有效。我做错了什么?似乎使用我的代表从未设置过的第一种方法。

最佳答案

从情节提要中实例化时,将调用initWithCoder:方法,而不是init方法。

DestinationViewController *destinationVC = [[destinationViewController alloc] init];
   destinationVC.delegate = self;

当控制器不是从情节提要中来时,该怎么做:您是从代码中初始化它的。之后,您必须手动处理从源VC到目标VC的过渡。
DestinationViewController *destinationVC = segue.destinationViewController;
destinationVC.delegate = self;

是在情节提要中定义控制器并将其作为segue的目的地时的操作方式。
执行segue时,将调用源视图控制器的prepareForSegue:方法,在其中应按需要配置目标:设置属性,委托,传递数据,...

08-27 19:39