多くの異なる種類のオブジェクトを受け取り、それらをどうするかを決定するメソッドがあります。
-(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 の 4 つのうちの 1 つが実行されます。最初の 3 つは送信されて NSArray になり、最後の 1 つはすでに NSArray になっています。
ここで、NSArray を別の場所からここに渡すと、次のようになります。
NSArray *myAction = [[NSArray alloc] initWithObjects:myAction1, myAction2, nil];
[controller performAction:myAction withItem:nil];
... myAction を NSArray ではなく NSCFArray として読み取るため、カスタム アクションは呼び出されません。[myAction isMemberOfClass:[NSCFArray class]] を試してみると、CF が認識されません。現時点で動作させる簡単な方法は、Look、Use、または Exit 以外のものはすべて NSArray であると想定することです (最後の else if を取り除き、else のままにしておきます)。 .
どうすればこれに対処できるか知っている人はいますか?
ありがとう、-k。