2012-04-05 2 views
1

Je sais qu'il y a quelques questions sur la pile en ce qui concerne ce sujet, et j'ai été à travers eux tous.la méthode du délégué est ignorée

Lorsque je débogue, une ligne de code qui appelle une méthode déléguée semble être ignorée. voici la ligne: [_delegate insertDataLocation:dbLocation Time:dbTime Reminder:dbReminder];

Je suppose que c'est une question du délégué ne pas être correctement réglé, alors voici comment je l'ai établi: ViewController.h

@protocol mapDelegate; 

@interface ViewController : UIViewController 

@property (strong, nonatomic) id<mapDelegate> delegate; 

ViewController.m

@synthesize delegate = _delegate; 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
[self setDelegate:_delegate]; 
} 

//Here's where I call the method, FYI 
[_delegate insertDataLocation:dbLocation Time:dbTime Reminder:dbReminder]; 

AppDelegate.h

@protocol mapDelegate 
-(void)insertDataLocation:(NSString*)l Time:(NSString*)t Reminder:(NSString*)r; 
@end 

@interface AppDelegate : UIResponder <UIApplicationDelegate, mapDelegate> 

AppDelegate.m

-(void)insertDataLocation:(NSString*)l Time:(NSString*)t Reminder:(NSString*)r { 
//Here's my method's code 
} 
+0

Est-ce que '@protocol mapDelegate;' ne devrait pas être conforme à NSObject? En outre, où définissez-vous votre délégué d'application en tant que 'mapDelegate'? – CodaFi

+0

@CodaFi Non, ce n'est pas le cas. – lnafziger

+0

Vous n'affichez pas le délégué défini dans le code que vous avez publié. – lnafziger

Répondre

3

1) Débarrassez-vous de la déclaration id<mapDelegate> delegate; au début de votre fichier .h. Vous avez lié votre propriété à une variable appelée _delegate dans votre instruction @synthesize, de sorte que l'autre est trompeuse. 2) Vous dites, «voici comment je l'ai défini», mais je ne vois rien qui définisse le délégué comme un objet.

3) L'utilisation de self.delegate plutôt que _delegate dans les méthodes normales est généralement une meilleure idée.

+0

Le troisième est faux. La définition et l'utilisation d'un iVar de sauvegarde est tout aussi fiable que l'appel de la propriété. – CodaFi

+0

Il est tout aussi fiable si vous êtes sûr qu'il n'y a pas de getter/setter personnalisé impliqué, mais je ne vois pas le besoin de me forcer à me souvenir de ce peu de trivia pour chaque propriété. :) –

+0

@CodaFi la convention de base de soulignement est de _prevent_ vous utilisant l'ivar partout par accident au lieu de la propriété. Si vous allez utiliser des ivars, pourquoi uglify votre code avec des underscores partout? – jrturton

Questions connexes