看下面的代码。
用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
。 最佳答案
不调用委托方法的最常见原因是处理不正确的对象。
CusFormViewController
对象ViewController
与您在屏幕上显示的相同,并且将委托设置在同一对象上。我真的相信
您正在创建一个新的
CusFormViewController
对象并进行设置委托。
CusFormViewController
中,在调用委托之前,请检查代表的存在。这是一项安全检查,您也可以放一个
NSLog语句仔细检查您的委托是否存在。您
在这里失败。
ViewController
切换到CusFormViewController
,则将委托设置为prepareForSegue:
而不是viewDidLoad
。 附带说明一下,在
NSLog
的viewDidLoad
中放入CusFormViewController
语句,并打印self.delegate
以检查属性设置。