2012-04-05 15 views
1

Ich weiß, es gibt ein paar Fragen zu Stack alrdy diesbezüglich, und ich habe sie alle durchgemacht.Delegate-Methode wird ignoriert

Beim Debuggen wird eine Codezeile, die eine Delegate-Methode aufruft, ignoriert. hier ist die Zeile: [_delegate insertDataLocation:dbLocation Time:dbTime Reminder:dbReminder];

ich es ist eine Frage des Delegierten ich davon nicht richtig eingestellt ist, so ist hier, wie ich es eingestellt habe: 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

Sollte '@protocol mapDelegate;' NSObject nicht entsprechen? Wo legen Sie Ihren App-Delegaten als 'mapDelegate' fest? – CodaFi

+0

@CodaFi Nein, tut es nicht. – lnafziger

+0

Sie zeigen nicht an, dass der Delegat in dem von Ihnen geposteten Code festgelegt wurde. – lnafziger

Antwort

3

1) Lassen Sie sich zu Beginn Ihrer .h-Datei der id<mapDelegate> delegate; Erklärung befreien. Sie haben Ihre Eigenschaft an eine Variable namens _delegate in Ihrer @ synthesize-Anweisung gebunden, sodass die andere irreführend ist.

2) Sie sagen: "Hier ist, wie ich es eingestellt habe", aber ich sehe nichts, was den Delegaten tatsächlich zu einem Objekt macht.

3) Mit self.delegate anstatt _delegate innerhalb der normalen Methoden ist in der Regel eine bessere Idee.

+0

Die dritte ist unwahr. Das Einrichten und Verwenden einer Sicherungs-iVar ist genauso zuverlässig wie das Aufrufen der Eigenschaft. – CodaFi

+0

Es ist genauso zuverlässig, wenn Sie sicher sind, dass kein benutzerdefinierter Getter/Setter involviert ist, aber ich sehe keine Notwendigkeit, mich selbst zu zwingen, sich an diese Kleinigkeiten für jede Eigenschaft zu erinnern. :) –

+0

@CodaFi die führende Unterstreichungskonvention ist es, _prevent_ Sie verwenden den ivar überall durch Zufall anstelle der Eigenschaft. Wenn Sie Ivars verwenden, warum sollten Sie Ihren Code überall mit Unterstreichungen versehen? – jrturton