我有一个方法可以接收许多不同类型的对象并决定如何处理它们:
-(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];
}
这里会出现四件事之一:Look、Use、Exit 或 NSArray。前三个被发送成为 NSArray,最后一个已经是 NSArray。
现在,当我从其他地方传递一个 NSArray 时,就像这样:
NSArray *myAction = [[NSArray alloc] initWithObjects:myAction1, myAction2, nil];
[controller performAction:myAction withItem:nil];
...永远不会调用自定义操作,因为它将 myAction 读取为 NSCFArray 而不是 NSArray。当我尝试 [myAction isMemberOfClass:[NSCFArray class]] 时,它无法识别 CF。目前让它工作的简单方法是假设任何不是 Look、Use 或 Exit 的东西都是 NSArray(去掉最后一个 else if,把它留作 else),但这对我来说似乎很草率.
有人知道我该如何处理吗?
谢谢,-k。