Kurze Beschreibung: Ich bekomme doesNotRecognizeSelector
Fehler beim Aufruf der Methode auf Objekt, das definitiv diese Methode hat und es passiert nach dem Aufruf respondsToSelector
.doesNotRecognizeSelector Fehler nach AntwortenToSelector überprüfen
Es ist eine sehr seltsame Situation und ich habe nicht verstanden, wie es sein kann :). Ich habe diesen Fehler bei der Anmeldung einiger Benutzergeräte gesehen, aber nicht bei allen. Ich kann das nicht auf meinem eigenen Gerät wiederholen.
Ich versuche herauszufinden, wie es passieren kann und fügte Bedingung mit respondsToSelector
hinzu, aber Problem tritt wieder auf.
Einige Code unten. Hoffe es hilft
1) Ich habe viewController
Objekt in AppDelegate
.
2) In einer anderen Klasse versuche ich, dieses Objekt zu bekommen und eine seiner Methoden aufzurufen. Aber auf [viewController showBanner]
Aufruf alle fehlschlägt mit doesNotRecognizeSelector
Fehler.
- (void) onEnterTransitionDidFinish {
[super onEnterTransitionDidFinish];
AdRootViewController *viewController = [(AppDelegate *)[[UIApplication sharedApplication] delegate] viewController];
if (viewController != nil && [viewController respondsToSelector:@selector(showBanner)]) {
[viewController showBanner];
}
}
3) AdRootViewController
hat diese Methode und es ist in der Schnittstelle deklariert.
@interface AdRootViewController : UIViewController {
}
- (void)showBanner;
...
@end
@implementation AdRootViewController
...
- (void)showBanner
{
adBannerViewIsVisible = YES;
...
}
...
@end
Die fehlgeschlagene Zeichenfolge ist [viewController showBanner]
.
Fehlerprotokoll sieht wie folgt aus:
1 CoreFoundation __exceptionPreprocess + 1245624
2 libobjc.A.dylib objc_exception_throw + 34136
3 CoreFoundation -[NSObject(NSObject) doesNotRecognizeSelector:] + 1274468
4 CoreFoundation ___forwarding___ + 1262188
5 CoreFoundation _CF_forwarding_prep_0 + 186376
6 <project_id> 4296487336 + 487848
...
P. S. Mai Stack-Trace wird es besser zeigen:
Setzen Sie einen Haltepunkt auf der Zeile, wo Sie "showBanner" und überprüfen Sie die ViewController iVar, um sicherzustellen, dass es tatsächlich eine Instanz von "AdRootViewController" ist. In AppDelegate könnte ein Problem auftreten, bei dem Sie der Eigenschaft nicht das richtige Objekt zuweisen. – YvesLeBorg
hi, danke aber es ist alles schon überprüft. Das Problem ist in meiner eigenen Umgebung nicht reproduzierbar. Ich habe zusätzliche Überprüfungen für nil und 'answerToSelector:' usw. hinzugefügt, aber das Problem existiert immer noch auf einigen Geräten des Benutzers. Ich habe nur überrascht, dass nach 'AntwortenToSelector:' ausgelöst werden kann "doesNotRecognizeSelector" Ausnahme in einer solchen Situation. – comrade
@comrade Ich bin mir absolut sicher, dass das nicht passieren kann. Ich frage mich, ob '[super onEnterTransitionDidFinish]' nicht der Schuldige sein kann. Wenn Sie das Problem nicht reproduzieren können, sollten Sie überprüfen, ob der Benutzer die aktuelle Version Ihrer App verwendet. – Sulthan