Есть простой -от задач, которым нужен индикатор выполнения. OpenSSL имеет полезный обратный вызов, который можно использовать для этого:
rsa=RSA_generate_key(bits,RSA_F4,progressCallback,NULL);
с
static void callback(int p, int n, void *arg) {
.. stuff
Однако я хочу вызвать это из ObjectiveC без лишних слов:
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeAnnularDeterminate;
hud.labelText = @"Generating CSR";
[self genReq:^(int p,int n,void *arg) {
hud.progress = --heuristic to guess where we are --
} completionCallback:^{
[MBProgressHUD hideHUDForView:self.view animated:YES];
}];
С Genrec :в качестве метода objC:
-(void)genReq:(void (^)(int,int,void *arg))progressCallback
completionCallback:(void (^)())completionCallback
{
.....
rsa=RSA_generate_key(bits,RSA_F4,progressCallback,NULL);
assert(EVP_PKEY_assign_RSA(pkey,rsa));
rsa=NULL;
....
completionCallback();
}
Теперь завершениеCallback (); работает великолепно и как ожидалось. Но я получаю предупреждение/ошибку компилятора, которую я не могу подавить для обратного вызова прогресса :
Passing 'void (^__strong)(int, int, void *)' to parameter of incompatible type 'void (*)(int, int, void *)'
. Мне любопытно --, как это сделать?
Спасибо,
Дв.