Ausgabe
In MyClass.m habe ich definiert
- (void) myTest: (NSString *) withAString{
NSLog(@"hi, %@", withAString);
}
und die entsprechende Deklaration in MyClass.h . Später möchte ich anrufen
[self performSelector:@selector(mytest:withAString:) withObject: mystring];
in MyClass.m, aber ich erhalte eine ähnliche Fehlermeldung wie
* Beenden der App aufgrund einer nicht erfassten Ausnahme ‘NSInvalidArgumentException’, Grund: ‘* -[MyClass myTest:withAtring:]: Unrecognized selector sent to instance 0xe421f0′
Ich habe einen einfacheren Fall mit einem Selektor ausprobiert, der keine Argumente akzeptierte, die eine Zeichenfolge an die Konsole ausgaben, und das funktionierte einwandfrei. Was ist mit dem Code falsch und wie kann ich ihn beheben? Vielen Dank.
Lösung
Ihre Methodensignatur lautet:
- (void) myTest:(NSString *)
withAString ist zufällig der Parameter (der Name ist irreführend, es sieht so aus, als wäre er Teil der Signatur des Selektors).
Wenn Sie die Funktion auf diese Weise aufrufen:
[self performSelector:@selector(myTest:) withObject:myString];
Es wird klappen.
Aber wie die anderen Poster vorgeschlagen haben, möchten Sie die Methode vielleicht umbenennen:
- (void)myTestWithAString:(NSString*)aString;
Und Ruf an:
[self performSelector:@selector(myTestWithAString:) withObject:myString];
Beantwortet von – Lyndsey Ferguson
Antwort geprüft von – Dawn Plyler (FixError Volunteer)