自定义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
和设置委托