La méthode de délégation n'est pas appelée?

J'ai un controller de vue avec une méthode de délégué qui devrait être appelée, mais pas?

NotifyingViewController.h

@protocol NotifyingViewControllerDelegate <NSObject> @required - (void)iWasAccepted; @end @interface NotifyingViewController : UIViewController @property (nonatomic, weak) id<NotifyingViewControllerDelegate> delegate; 

NotifyingViewController.m

 -(void)someMethod{ [self.delegate iWasAccepted]; [self dismissViewControllerAnimated:YES completion:nil]; } 

NotifiedViewController.h

 #import "NotifyingViewController.h" @interface NotifiedViewController : UIViewController <NotifyingViewControllerDelegate> 

NotifiedViewController.m

 -(void)iWasAccepted{ [self saveIntoDB]; NSLog(@"DELEGATE RAN"); } 

Pour une raison quelconque, le controller qui doit être averti ne l'est pas. Le controller Notifying rejette la signification de la méthode qui alerte l'exécution IS du délégué, mais le délégué n'exécute pas la fonction car elle ne le fait pas. Des idées pourquoi?

Vous ne pouvez pas spécifier qu'un object est conforme à un protocole. Vous devez également affecter cet object en tant que délégué. Lorsque vous allouez / init l'instance de NotifyingViewController, définissez son délégué sur self et tout devrait bien se passer.

 NotifyingViewController *notifyingInstance = [[NotifyingViewController alloc] init]; [notifyingInstance setDelegate:self]; 

Il est important de le faire et de spécifier que la class est conforme au protocole, ce que vous faites déjà avec cette ligne.

 @interface NotifiedViewController : UIViewController <NotifyingViewControllerDelegate> 

En outre, lors de l'appel de methods déléguées, il est recommandé d'envelopper les appels de fonction dans respondsToSelector: checks.

 if ([self.delegate respondsToSelector:@selector(iWasAccepted)]) { [self.delegate iWasAccepted]; }