¿El método de delegado no se llama?

Tengo un controller de vista con un método de delegado que debería llamarse, pero no es así?

NotifyingViewController.h

@protocol NotifyingViewControllerDelegate <NSObject> @requinetworking - (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"); } 

Por alguna razón, el controller que debería ser notificado no lo es. El controller de notificación descarta el significado del método que alerta a que el delegado IS se ejecuta, pero el delegado no ejecuta la function porque no lo hace NSLog. ¿Alguna idea de por qué?

No puede especificar que un object se ajusta a un protocolo. También debe asignar ese object como delegado. Cuando asigna / inicia la instancia de NotifyingViewController, configure su delegado en sí mismo y debería estar bien.

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

Es importante que ambos hagan esto, y especifique que la class se ajusta al protocolo, que ya está haciendo con esta línea.

 @interface NotifiedViewController : UIViewController <NotifyingViewControllerDelegate> 

Además, al llamar a los methods de delegado, es una buena práctica envolver las llamadas de function en respondsToSelector: cheques.

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