[英]Delegate method not firing?
就在我以为我的代表如何工作时,我似乎错过了一些东西。
我已经像这样设置了一个委托:
ViewControllerA.h
@protocol LoginDelegate <NSObject>
-(void)userLoginSuccessful;
@end
@interface BBLoginViewController : BBBaseViewController
@property (weak, nonatomic) id <LoginDelegate> delegate;
@end
ViewControllerA.m
-(void)someMethod
{
if ([self.delegate respondsToSelector:@selector(userLoginSuccessful)]){
[self.delegate userLoginSuccessful];
}
[self dismissViewControllerAnimated:YES completion:nil];
}
ViewControllerB.m
#import "ViewControllerA.h"
@interface ViewControllerB () <UITableViewDataSource, UITableViewDelegate, LoginDelegate>
-(void)viewWillAppear:(BOOL)animated
{
ViewControllerA *loginViewController = [[ViewControllerA alloc]init];
loginViewController.delegate = self;
}
#pragma mark - Login Delegate
-(void) userLoginSuccessful
{
NSLog (@"Delegate fired!");
}
毕竟,我的委托方法不会触发。 我究竟做错了什么? 我看着这个答案 ,当检查委托不是nil-不是。 将其设置为ViewControllerB
。
这段代码:
-(void)viewWillAppear:(BOOL)animated
{
ViewControllerA *loginViewController = [[ViewControllerA alloc]init];
loginViewController.delegate = self;
}
将创建一个ViewControllerA
对象,然后(几乎)立即销毁它,这不是您想要的。
无论如何,您可能都想在prepareForSegue:
方法中设置委托...
在呈现ViewControllerB
之前设置delgate
。 不再需要以下代码
-(void)viewWillAppear:(BOOL)animated
{
ViewControllerA *loginViewController = [[ViewControllerA alloc]init];
loginViewController.delegate = self;
}
不要那样做。 它会给您意外的结果。 请记住,在移至下一个视图之前,请务必先设置委托。 如果您在presentViewController
之前presentViewController
模态呈现,或者您是否在prepareForSegue
中使用segue
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.