[英]Custom Delegate Methods not being called
请查看以下代码。
在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
和ticketFormRenderingFinished
。
委托方法未被调用的最常见原因是处理不正确的对象。
ViewController
创建的CusFormViewController
对象与您在屏幕上显示的对象相同,并且委托是在同一对象上设置的。 我真的相信你正在创建一个新的CusFormViewController
对象并在其上设置委托。 CusFormViewController
,在调用委托之前, CusFormViewController
检查委托是否存在。 这是一个安全检查,你也可以放一个NSLog语句来仔细检查你的代表是否存在。 你在这里失败了。 ViewController
转到CusFormViewController
那么你在prepareForSegue:
设置委托prepareForSegue:
而不是在viewDidLoad
。 作为旁注,在您的CusFormViewController
viewDidLoad
中放置一个NSLog
语句并打印self.delegate
以检查属性设置。
执行函数viewDidLoad
后,将formVC
分配控制器formVC
。 在formVC上创建强大的引用,例如:
@interface ViewController ()<CusFormViewControllerDelegate>
{
CusFormViewController *_formVC;
}
- (void)viewDidLoad {
[super viewDidLoad];
_formVC = [[CusFormViewController alloc] init];
[formVC setDelegate:self];
}
嘿尝试使用下面的方法创建CusFormViewController的实例
CusFormViewController * _formVC = [[UIStoryboard storyboardWithName:storyboardName bundle:nil] instantiateViewControllerWithIdentifier:@“IDENTIFIER_OF_YOUR_ CusFormViewController”];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.