【发布时间】:2014-05-20 07:39:26
【问题描述】:
就在我以为我已经了解了代表的工作方式时,我似乎遗漏了一些东西。
我已经像这样设置了一个委托:
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!");
}
毕竟我的委托方法没有触发。我究竟做错了什么?我查看了this SO answer,当检查委托不是零时 - 它不是。它设置为ViewControllerB。
【问题讨论】:
-
检查您的委托方法。你已经定义了这个协议方法
userLoginSuccessful并且你正在调用-(void)expanItemImage:(UITapGestureRecognizer *)tap -
而且您不需要检查您的委托是否响应协议选择器,因为您将其正确定义为符合 LoginDelegate 协议的类型。
-
复制和粘贴错误 - 更新了问题。对不起各位。我删除了 IF 语句检查选择器是否响应委托并且它仍然没有被调用
-
你是否到达线[self.delegate userLoginSuccessful]; ?
-
我到达了 if 语句。永远不会执行。删除语句并调用 [self.delegate userLoginSuccessful];也不行。
标签: ios objective-c delegates