自定义setter方法的委托被称为无限次

在我的VC我已经声明了一个自定义的委托属性:

@interface VC2 : BaseVC @property (nonatomic,weak) id<VC2Delegate> delegate; @end 

并从VC1,我设置这个代表:

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ if ([[segue identifier] isEqualToString: @"VC2"]) { self.VC2 = [segue destinationViewController]; [self.VC2 setDelegate:self]; } } 

在我的VC2中,我为代表写了一个setter方法:

 -(void)setDelegate:(id)del{ self.delegate=del; } 

这个问题,在VC1中的pprepareForSegue方法调用之后,VC2中委托的setter方法被调用了很多次,我的应用程序崩溃了。 我不确定可能是什么原因。

这里是satcktrace:

在这里输入图像说明

在这里输入图像说明

我没有任何实现我的BaseVC。 这只是一个普通的VC。

这里是你的问题self.delegate实际上是一个setter,这就是为什么你骑自行车。 你应该在你的setter中使用_delegate = del。

当你用self.delegate访问你的属性时,你实际上调用了getter。 尝试将其设置为实例variables,如下所示:

 -(void)setDelegate:(id)del{ _delegate=del; } 

你不需要setter方法,因为你可以直接设置委托,

  - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ if ([[segue identifier] isEqualToString: @"VC2"]) { self.VC2 = [segue destinationViewController]; self.VC2.delegate = self; } } 

你只需要在VC2的.h文件中声明委托属性。

你可以把VC2.h中的财产,

  @property ViewController *delagate; 

Viewconroller是你从哪个VC调用prepareForSegue和设置委托