自定义委托方法未被调用

时间:2015-10-15 07:37:37

标签: ios objective-c xcode delegates logic

请查看以下代码。

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未被调用。

3 个答案:

答案 0 :(得分:2)

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

  1. 确保从CusFormViewController对象创建 ViewController与您在屏幕上呈现的内容相同 委托被设置在同一个对象上。我真的相信 您正在创建一个新的CusFormViewController对象和设置 代表。
  2. CusFormViewController中,在调用委托之前,请检查 代表的存在也是如此。这是一个安全检查,你也可以放一个 NSLog语句,用于仔细检查您的委托是否存在。您 在这里失败了。
  3. 如果您要从ViewController转到CusFormViewController,则可以在prepareForSegue:而不是viewDidLoad中设置委托。
  4. 作为旁注,请在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”];