Я хочу передать C-массивы методу в Objective-C после задержки. Как правило, я мог выполнять выбор: withObject: afterDelay, но я не могу каким-либо образом изменить массивы или преобразовать их в NSMutableArrays, NSDictionaries или любой другой объект Cocoa - они должны быть C-массивами. В моих исследованиях здесь, в StackOverflow и Google, я обнаружил, что одним из способов передачи примитива C является их объединение в NSInvocation. Я попытался сделать это с помощью кода ниже и установить аргументы в качестве указателей на передаваемые массивы.NSInvocation pass C-array до Objective-C method
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]);
}
}
Вы можете изменить способ, чтобы принять объект? Если это так, вы можете вставить байты в 'NSData', а затем распаковать их с другой стороны. –
@JoshCaswell: Или просто создайте промежуточный метод «thunk», который делает распаковку, и поворачивается и вызывает желаемый целевой метод. –
Нет, я не могу изменить C-массивы. Синтаксис выглядит нормально для NSInvocation? Похоже, что он должен работать - указатель на первый элемент многодискового массива, а затем просто распечатывает несколько значений после перехода к testMethod. Я получаю EXC_BAD_ACCESS в строке NSLog. – PhilBot