Ich verwende das iPhone SDK (3.0) und versuche, ein Array von Selektoren zu erstellen , um eine Vielzahl von Methoden innerhalb einer Klasse aufzurufen.
Offensichtlich mache ich etwas falsch (ich denke, @selector wird nicht als Klasse angesehen und daher funktioniert es nicht, sie in ein NSArray zu stopfen).
Ich habe es versucht, aber es ist offensichtlich falsch.
Gibt es eine einfache Möglichkeit, eine Reihe solcher Selektoren zu haben? Oder gibt es eine bessere Möglichkeit, eine Sammlung von Methoden zu durchlaufen?
selectors = [NSArray arrayWithObjects:
@selector(method1),
@selector(method2),
@selector(method3),
@selector(method4),
@selector(method5),
@selector(method6),
@selector(method7), nil];
for (int i = 0; i < [selectors count]; i++) {
if ([self performSelector:[selectors objectAtIndex:i]]) // do stuff;
}
ios
objective-c
nsarray
selector
user141146
quelle
quelle
NSPointerArray
ist besser.Dadurch wird ein Objekt außerhalb des Selektors erstellt:
quelle
performSelector:
?SEL x = (SEL)selectorValue.pointerValue;
Warum nicht einfach ein einfaches C-Array verwenden?
quelle
static
wird hier aber nicht benötigt (Initialisierer ist keine Konstante zur Kompilierungszeit).Sie können auch ein Array von
NSInvocation
s erstellen . Dies ist praktisch, wenn Sie ein Argument für Ihre Auswahl benötigen.quelle
Wenn die Liste statisch ist, würde ich mich für die KennyTM-Lösung entscheiden. Wenn Sie jedoch ein dynamisches Array oder Set benötigen, besteht eine andere Option neben dem Speichern der
SEL
Auswahlzeichenfolge darin, ein Objekt mit einer Eigenschaft oder einem ivar zu erstellen und dieses zu speichern.Sie können dann auch
perform
der Klasse eine Methode hinzufügen und dort den Methodenaufruf implementieren.quelle
Ich möchte zwei Methoden zum Speichern von Selektoren in einem Array ergänzen:
Erstens
NSPointerArray
kann undurchsichtiger Zeiger gespeichert werden, wieSEL
, wie Apple Doc sagte,Zweitens ist das Array im C-Stil viel einfacher.
Wählen Sie eine nach Ihren Wünschen.
quelle