Kev*_*ers 4 iphone cocoa-touch objective-c nsarray
我有一个接收许多不同类型对象的方法,并决定如何处理它们:
-(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];
Run Code Online (Sandbox Code Playgroud)
}
这里有四件事之一:Look,Use,Exit或NSArray.前三个被送去成为NSArrays,最后一个已经是NSArray.
现在,当我从其他地方传递NSArray时,就像这样:
NSArray *myAction = [[NSArray alloc] initWithObjects:myAction1, myAction2, nil];
[controller performAction:myAction withItem:nil];
Run Code Online (Sandbox Code Playgroud)
...从不调用自定义操作,因为它将myAction读作NSCFArray而不是NSArray.当我尝试[myAction isMemberOfClass:[NSCFArray class]]时,它无法识别CF. 让它在当下工作的简单方法就是假设任何不是Look,Use或Exit的东西都是NSArray(除去最后的其他内容,只是把它留作别的东西),但这对我来说似乎很草率.
谁知道我怎么处理这个?
谢谢,-k.
您可以尝试使用isKindOfClass:而不是isMemberOfClass:.
对于作为您发送的类的实例或其子类的对象,第一个将返回YES,因为它可能是这种情况NSCFArray.
| 归档时间: |
|
| 查看次数: |
6095 次 |
| 最近记录: |