Я хочу передать C-массивы методу в Objective-C после задержки. Обычно я мог бы выполнитьSelector: withObject: afterDelay, но я не могу каким-либо образом изменить массивы или преобразовать их в NSMutableArrays, NSDictionaries или любой другой объект Какао - они должны быть массивами C. В моем исследовании StackOverflow и Google я обнаружил, что один из способов передать примитив C - это обернуть их в 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]);
}
}