遅れてC配列をObjective-Cのメソッドに渡したい。通常、Selector:withObject:afterDelayを実行できますが、配列を変更したり、NSMutableArrays、NSDictionaries、またはその他のCocoaオブジェクトに変換したりすることはできません。C配列である必要があります。StackOverflowとGoogleに関する私の調査では、Cプリミティブを渡す1つの方法は、それらをNSInvocationでラップすることであることがわかりました。以下のコードでこれを実行し、渡される配列へのポインターとして引数を設定してみました。
float gun1_vertex[24][8] = { {data,...data},{data,...data}, ... {data,...data} };
float gunDown1_vertex[24][8] = { {data,...data},{data,...data}, ... {data,...data} };
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:@selector(testMethod:secondCArray:)]];
[inv setSelector:@selector(testMethod:secondCArray:)];
[inv setTarget:self];
[inv setArgument:&gun1_vertex[0][0] atIndex:2];
[inv setArgument:&gunDown1_vertex[0][0] atIndex:3];
[inv performSelector:@selector(invoke) withObject:nil afterDelay:0.1f];
以下の方法で渡された配列からいくつかの値を出力しようとすると、テストアプリがクラッシュし続けます。私はおそらく完全に明白な何かを見逃しているだけです。誰かがここに光を当ててくれませんか?
- (void)testMethod:(float *)test secondCArray:(float *)test2 {
for ( int a = 0 ; a < 10 ; a++ ) {
NSLog(@"%f %f",test[a],test2[a]);
}
}