2012-04-09 6 views
2

Nun, ich bin das Erstellen eines benutzerdefinierten SEL wie:objective-C: Wie führe ich einen performSelector aus: @selector?

NSArray *tableArray = [NSArray arrayWithObjects:@"aaa", @"bbb", nil]; 
for (NSString *table in tableArray){ 
    SEL customSelector = NSSelectorFromString([NSString stringWithFormat:@"abcWith%@", table]); 
    [self performSelector:customSelector withObject:0]; 
} 

ich eine Fehlermeldung anzeigt: App beenden aufgrund nicht abgefangene Ausnahme 'NSInvalidArgumentException', Grund: ‚- [Sync aaaWithaaa]: Unbekannter Selektor gesendet Beispiel

aber wenn ich es mit dem richtigen Methodennamen ausführe, funktioniert es!

[self performSelector:@selector(aaaWithaaa:) withObject:0]; 

Wie löst man es? Vielen Dank!

Antwort

6

Du hast bereits ein Selektor aus Zeichenfolge erstellt - es perform passieren: Methode:

[self performSelector:customSelector withObject:0]; 

Edit: Geist, dass, wenn Ihre Methode nimmt Parameter dann Sie Muss Verwendung Kolon wenn Selektor erstellen aus es:

// Note that you may need colon here: 
[NSString stringWithFormat:@"abcWith%@:", table] 
+0

Danke, ich habe meine Frage aktualisiert –

+0

Sie haben Recht! Der Doppelpunkt! –

0

Schließen.

Der Unterschied ist, dass Sie mit @selector(aaaWithaaa:) einen Methodennamen übergeben, aber mit @selector(customSelector:) übergeben Sie eine Variable vom Typ SEL (mit einem Ersatz-Doppelpunkt).

Stattdessen brauchen Sie nur:

[self performSelector:customSelector withObject:0]; 

Der andere Unterschied ist, dass Sie Ihre String mit einem Doppelpunkt am Ende schreiben , aber Sie stringWithFormat: hat keine. Es ist wichtig; es bedeutet, dass die Methode einen Parameter akzeptiert. Wenn Ihre Methode einen Parameter hat, muss es dabei sein, das heißt,

[NSString stringWithFormat:@"abcWith%@:", table] 
+0

Danke, ich habe meine Frage aktualisiert –

1
NSArray *tableArray = [NSArray arrayWithObjects:@"aaa", @"bbb", nil]; 

for (NSString *table in tableArray){ 
    SEL customSelector = NSSelectorFromString([NSString stringWithFormat:@"abcWith%@:", table]); 
    [self performSelector:customSelector withObject:0]; 
} 
0
- (id)performSelector:(SEL)aSelector withObject:(id)anObject 

Erstes Argument ist SEL Typ.

SEL customSelector = NSSelectorFromString([NSString stringWithFormat:@"abcWith%@", table]); 
[self performSelector:customSelector withObject:0]; 
Verwandte Themen