Ich frage mich nur, ob es eine Möglichkeit gibt, eine Methode aufzurufen, bei der ich den Namen der Methode im laufenden Betrieb mit einer Zeichenfolge erstelle.
zB habe ich eine Methode namens loaddata
-(void)loadData;
Um dies zu nennen, würde ich es normalerweise so nennen
[self loadData];
Aber ich möchte es dynamisch mit einem String aufrufen können, z
NSString *methodName = [[NSString alloc] initWithString:@"loadData"];
[self methodName];
Dies ist ein dummes Beispiel, aber ich hoffe, Sie verstehen meinen Standpunkt. Ich verwende es für Datenbindungsklassen, die ich für meine IPad-Anwendung einrichte. Schwer zu erklären, aber um es zum Feuern zu bringen, muss ich herausfinden, wie man eine Methode mit einem String aufruft.
Irgendwelche Ideen?
Vielen Dank
Antworten:
Sie können so etwas versuchen
SEL s = NSSelectorFromString(selectorName); [anObject performSelector:s];
quelle
[boundEntity performSelector:s]
Gibt einen Wert vom Typ zurück, der nicht mit dem Typ von übereinstimmt[self text]
. Ich denke, Sie müssen @property für Text und Anruf festlegen[self setText:[[boundEntity performSelector:s]]]
.Sie können die Funktion objc_msgSend verwenden. Es sind zwei Parameter erforderlich, der Empfänger und der Selektor, um an ihn zu senden:
objc_msgSend(self, someSelector);
Sie müssen Ihre Zeichenfolge in den entsprechenden Selektor verwandeln, indem Sie
NSSelectorFromString
:NSString *message = [self getSomeSelectorName]; objc_msgSend(self, message);
Die Methode akzeptiert auch eine variable Anzahl von Argumenten, sodass Sie Nachrichten mit einer beliebigen Anzahl von Argumenten senden können.
NSString *message = [self getSomeSelectorNameWithManyArguments]; objc_msgSend(self, message, arg1, arg2, arg3, arg4);
quelle