Delegate-Methode nicht aufgerufen wird?
Ich habe einen view-controller mit einer delegate-Methode, die aufgerufen werden soll, aber es funktioniert nicht?
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");
}
Für einige Grund, der controller, die informiert werden sollen, ist es nicht. Die entsprechende Steuerung wird entlassen Bedeutung der Methode, die Warnungen der Delegat ausgeführt WIRD, aber der Delegat wird der Befehl nicht ausgeführt werden, weil es nicht NSLog. Irgendwelche Ideen, warum?
- Wo sehen Sie zuweisen
NotifiedViewController
alsNotifyingViewController
's delegieren? - Ihre
delegate
ist einweak
Referenz (wie es sein sollte); sind Sie sicher, dass Sie es nicht gewordennil
wenn Sie es nennen? - Ich dachte, Sie müssen es nur tun, in der UIViewController:NSObject<> Teil? Gibt es irgendwo sonst brauche ich zu sagen? Sorry, ich bin neu in der delegate-Methoden 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann man nicht einfach angeben, dass ein Objekt entspricht einem Protokoll. Müssen Sie das Objekt als delegate. Wenn Sie mit alloc/init die Instanz von NotifyingViewController, seine Stellvertretung selbst und Sie sollten in Ordnung sein.
Es ist wichtig, beide zu tun, und angeben, dass die Klasse entspricht dem Protokoll, das Sie bereits tut, mit dieser Zeile.
Darüber hinaus bei Aufruf der delegate-Methoden ist es gute Praxis, wickeln Sie die Funktion Anrufe in
respondsToSelector:
überprüft.NSInvalidArgumentException
und beschweren sich darüber, wie ein "unbekannter Selektor geschickt Instanz." Kurz gesagt, ist diese Prüfung können Sie nur die Methode aufrufen, wenn der Delegat-Instanz implementiert es.