看下面的代码。

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.");
}

没有调用ticketCreatedticketFormRenderingFinished

最佳答案

不调用委托方法的最常见原因是处理不正确的对象。

  • 确保从创建的CusFormViewController对象ViewController与您在屏幕上显示的相同,并且
    将委托设置在同一对象上。我真的相信
    您正在创建一个新的CusFormViewController对象并进行设置
    委托。
  • CusFormViewController中,在调用委托之前,请检查
    代表的存在。这是一项安全检查,您也可以放一个
    NSLog语句仔细检查您的委托是否存在。您
    在这里失败。
  • 如果您是从ViewController切换到CusFormViewController,则将委托设置为prepareForSegue:而不是viewDidLoad

  • 附带说明一下,在NSLogviewDidLoad中放入CusFormViewController语句,并打印self.delegate以检查属性设置。

    07-26 09:40