2015-10-15 3 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. Убедитесь, что CusFormViewController объект, созданный из ViewController тот же, который вы представляете на экране и , что делегат быть установлен на том же объекте. Я действительно верю, что вы создаете новый объект CusFormViewController и задаете делегату.
  2. В CusFormViewController перед вызовом делегата проверьте наличие делегата, а также . Это проверка безопасности, вы также можете поместить оператор NSNSLog, чтобы проверить, существует ли ваш делегат или нет. Вы здесь .
  3. Если вы делаете переезд от ViewController до CusFormViewController, тогда вы устанавливаете делегата в prepareForSegue:, а не в viewDidLoad.

Как примечание стороны, поставить NSLog заявление в viewDidLoad вашей CusFormViewController и печати self.delegate для проверки значения свойства.

0

Эй пытаются создать экземпляр CusFormViewController с использованием метода ниже
CusFormViewController * _formVC = [[UIStoryboard storyboardWithName: storyboardName расслоением: ноль] instantiateViewControllerWithIdentifier: @ "IDENTIFIER_OF_YOUR_ CusFormViewController"];

0

Попробуйте изменить эту строку

[formVC setDelegate: автономный];

С

formVC.delegate = само;