2015-10-15 64 views
1

請看下面的代碼。自定義委託方法不被調用

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沒有被調用。

+0

在CusFormViewController.m中檢查NSLog(@「%@」,self.delegate); –

+0

CusFormViewController是嵌入故事板還是不嵌入? –

+0

請發表更多代碼。 – anhtu

回答

1

您的控制器formVC在執行功能viewDidLoad後處理。創建你的formVC例如像這樣有力的參考:

@interface ViewController()<CusFormViewControllerDelegate> 
{ 
    CusFormViewController *_formVC; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    _formVC = [[CusFormViewController alloc] init]; 
    [formVC setDelegate:self]; 
} 
+1

這並不能幫助我。感謝你的時間。 –

+0

@Shashi請添加您的'CusFormViewController.m'和'CusFormViewController.h'代碼。它應該工作) – katleta3000

2

的委託方法不能被稱爲是處理不正確的對象最常見的原因。

  1. 確保 ViewController創建CusFormViewController對象是你被呈現在屏幕上,並 該委託的同一對象上設置的相同。我真的相信 你正在創建一個新的CusFormViewController對象,並設置 委託。
  2. CusFormViewController中,在調用委託之前,請檢查 是否存在委託。這是一個安全檢查,你也可以把一個 NSLog語句仔細檢查你的委託是否存在。你在 這裏失敗。
  3. 如果您從ViewController繼續撥打到CusFormViewController,那麼您將代理人設置爲prepareForSegue:而不是viewDidLoad

作爲一個方面說明,把NSLog語句進行CusFormViewControllerviewDidLoad和打印self.delegate檢查屬性設置。

0

嘿嘗試使用以下方法來創建CusFormViewController的實例
CusFormViewController * _formVC = [[UIStoryboard storyboardWithName:STORYBOARDNAME束:無] instantiateViewControllerWithIdentifier:@ 「IDENTIFIER_OF_YOUR_ CusFormViewController」];

0

嘗試改變此行

[formVC setDelegate:self];

With

formVC.delegate = self;