繁体   English   中英

代表方法不触发?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM