Frage

Ich habe eine Methode, die viele verschiedene Arten von Objekten und entscheidet, was mit ihnen zu tun bekommt:

-(void)performAction:(NSObject *)myAction withItem:(Item *)myItem {

actionCount = -1;
NSLog(@"-- NEW ACTION ARRAY --");
if ([myAction isMemberOfClass:[Look class]]) {
    currentActionArray = [self createLookArray:(Look *)myAction item:myItem];
} else if ([myAction isMemberOfClass:[Use class]]) {
    currentActionArray = [self createUseArray:(Use *)myAction item:myItem];
} else if ([myAction isMemberOfClass:[Exit class]]) {
    currentActionArray = [self createExitArray:(Exit *)myAction item:myItem];
} else if ([myAction isMemberOfClass:[NSArray class]] ) {
    NSLog(@"--- CUSTOM ACTION --- %@", myAction);
    currentActionArray = (NSArray *)myAction;
} 
[self performNextAction];

}

Eine von vier Dinge geht durch hierher kommen: Schauen Sie, Verwenden, Beenden oder NSArray. Die ersten drei sind abgeschickt NSArrays zu werden, der letzte ist bereits ein NSArray.

Nun, wenn ich eine NSArray in hier passieren von anderswo, wie folgt aus:

    NSArray *myAction = [[NSArray alloc] initWithObjects:myAction1, myAction2, nil];
[controller performAction:myAction withItem:nil];

... die benutzerdefinierte Aktion wird nie genannt, weil es MyAction als NSCFArray eher als ein NSArray liest. Wenn ich versuche, [MyAction isMemberOfClass: [NSCFArray Klasse]] es erkennt nicht die CF. Der einfache Weg, um es zur Zeit zum Laufen zu bringen ist nur, dass irgendetwas nicht davon ausgehen, einen Blick, Verwendung oder Ausgang ist ein NSArray (erhält sonst die letzten befreien, wenn es nur als sonst verlassen), aber das scheint schlampig mir .

Wer weiß, wie ich damit umgehen kann?

Danke, -k.

War es hilfreich?

Lösung

Sie können versuchen, isKindOfClass: statt isMemberOfClass: verwendet wird.

Die erste wird JA Rückkehr für Objekte, die entweder Instanzen der Klasse sind Sie senden, oder Subklassen davon, wie es der Fall für NSCFArray sein kann.

Andere Tipps

Zwei Möglichkeiten eine Überlegung wert:

NSСFArray ist Unterklasse von NSMutable Array

Sie können isKindOfClass verwenden, es zu überprüfen

if ([myAction isMemberOfClass:[Look class]]) {
    currentActionArray = [self createLookArray:(Look *)myAction item:myItem];
} else if ([myAction isMemberOfClass:[Use class]]) {
        currentActionArray = [self createUseArray:(Use *)myAction item:myItem];
} else if ([myAction isMemberOfClass:[Exit class]]) {
        currentActionArray = [self createExitArray:(Exit *)myAction item:myItem];
} else if ([myAction isKindOfClass:[NSArray class]] ) {
        NSLog(@"--- CUSTOM ACTION --- %@", myAction);
        currentActionArray = (NSArray *)myAction;
} 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top