请查看以下代码。
在CusFormViewController.h
@interface CusFormViewController : CusBaseViewController
@protocol CusFormViewControllerDelegate <NSObject>
-(void)ticketCreated:(NSString*)ticketID;
-(void)ticketFormRenderingFinished;
@end
@property (nonatomic, weak) id<CusFormViewControllerDelegate> delegate;
在CusFormViewController.m
if ([self.delegate respondsToSelector:@selector(ticketFormRenderingFinished)])
[self.delegate ticketFormRenderingFinished];
if ([self.delegate respondsToSelector:@selector(ticketCreated:)])
[self.delegate ticketCreated:ticket_id];
在ViewController.m
#import "CusFormViewController.h"
@interface ViewController ()<CusFormViewControllerDelegate>
- (void)viewDidLoad {
[super viewDidLoad];
CusFormViewController *formVC = [[CusFormViewController alloc] init];
[formVC setDelegate:self];
}
-(void)ticketCreated:(NSString*)ticketID{
NSLog(@"ticket created.");
}
-(void)ticketFormRenderingFinished{
NSLog(@"ticket form rendered.");
}
ticketCreated
&amp; ticketFormRenderingFinished
未被调用。
答案 0 :(得分:2)
未调用委托方法的最常见原因是处理不正确的对象。
CusFormViewController
对象创建
ViewController
与您在屏幕上呈现的内容相同
委托被设置在同一个对象上。我真的相信
您正在创建一个新的CusFormViewController
对象和设置
代表。CusFormViewController
中,在调用委托之前,请检查
代表的存在也是如此。这是一个安全检查,你也可以放一个
NSLog语句,用于仔细检查您的委托是否存在。您
在这里失败了。ViewController
转到CusFormViewController
,则可以在prepareForSegue:
而不是viewDidLoad
中设置委托。作为旁注,请在NSLog
的{{1}}中添加viewDidLoad
声明并打印CusFormViewController
以检查属性设置。
答案 1 :(得分:1)
执行函数formVC
后,控制器viewDidLoad
被解除分配。在formVC上创建强大的引用,例如:
@interface ViewController ()<CusFormViewControllerDelegate>
{
CusFormViewController *_formVC;
}
- (void)viewDidLoad {
[super viewDidLoad];
_formVC = [[CusFormViewController alloc] init];
[formVC setDelegate:self];
}
答案 2 :(得分:0)
嘿尝试使用以下方法创建CusFormViewController的实例 CusFormViewController * _formVC = [[UIStoryboard storyboardWithName:storyboardName bundle:nil] instantiateViewControllerWithIdentifier:@“IDENTIFIER_OF_YOUR_ CusFormViewController”];