2009-07-07 12 views
9

Wie kann ich eine Methode zur Laufzeit auf einer Objective-C-Klasse aufrufen, wenn alles, was ich habe, ist es Unterschrift in String-Form:Aufrufen einer Objective-C-Methode mit Namen

NSString* typeName = @"Widgets"; 
NSString* methodName = [NSString stringWithFormat:@"add%@Object:", typeName]; 

Beachten Sie, dass der Name Methode kann sich ändern Zur Laufzeit bleibt die Anzahl der Argumente jedoch konstant - in diesem Fall eins.

Antwort

26

Sie können so etwas wie die folgenden verwenden:

SEL selector = NSSelectorFromString(methodName); 
[myObject performSelector:selector]; 

Es gibt auch performSelector:withObject: und performSelector:withObject:withObject: Methoden, wenn Sie Parameter übergeben müssen.

+10

Vergessen Sie nicht, NSInvocation für, wenn Sie mehr als 2 Parameter benötigen. – dreamlax

+0

Wenn Sie 'performSelector: withObject:' verwenden, achten Sie darauf, den Methodennamen mit einem Doppelpunkt zu beenden. Der Methodenname ohne Doppelpunkt entspricht einer Methode ohne Parameter. –

+0

Danke [dreamlax] (http://stackoverflow.com/users/10320/dreamlax) !. Hier eine [komplette Antwort] (http://stackoverflow.com/a/313455/1121497) über 'NSInvocation'. –

Verwandte Themen