있기 때문입된 NSCFArray 때 전달
-
10-07-2019 - |
문제
나는 방법이 있을 수신하는 많은 다른 종의 개체고 결정한 그들과 함께 무엇을 할:
-(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];
}
하나의 네 가지고 올해는 여기:보를 사용 종료하거나 있기 때문입.처음 세 가지가 전송되 NSArrays,마지막은 이미 있기 때문입.
지금 할 때,나는 통과하 있기 때문입 여기에서 다른 곳에서,다음과 같다:
NSArray *myAction = [[NSArray alloc] initWithObjects:myAction1, myAction2, nil];
[controller performAction:myAction withItem:nil];
...사용자 지정 작업을 호출되지 않기 때문에 읽습 myAction 로 NSCFArray 보다는 오히려 있기 때문입.When I try[myAction isMemberOfClass:[NSCFArray 스]]지 않을 인식한다.간단한 방법으로 작업을 얻을 수있는 순간에 그냥하다고 가정하지 않은 것의 모습,사용 또는 종이 있기 때문입(을 없애의 마지막이 다른 경우에,단지 그것을 떠날로 다른 사람),그러나 그 보인다 실수요.
누구나 알고 어떻게 다룰 수 있는 이?
감사합니다, -k.
해결책
당신이 사용하실 수 있습니다 isKindOfClass:
대 isMemberOfClass:
.
첫 번째 하나의 반환에 대한 예 개체 중 하나 클래스의 인스턴스를 보낼 수 또는 하위 클래스로,그것은 그것이 될 수 있습 케이스 NSCFArray
.
다른 팁
두 가지 가능성을 고려 가치가있:
NSArray
클래스 클러스터입니다.지 알고 정확한의 행동-isMemberOfClass:
고-isKindOfClass:
에서 클러스터입니다.당신은 이것을 확인하실 수 있습니다 질문에 대한 더 많은 정밀도: 그것은 사용하기에 안전 isKindOfClass:에 대한@입니스 유형을 확인 하려면?을 시도했다
-isKindOfClass:
대-isMemberOfClass:
?
NSCFArray 은 서브 클래스의 NSMutable 배열
당신이 사용할 수 있습 isKindOfClass 확인
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;
}