एक सरल एक-ऑफ कार्य है जिसके लिए प्रगति पट्टी की आवश्यकता है।ओबीजेसी ब्लॉक और 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 साथ OpenSSL एक उपयोगी कॉलबैक जो एक है कि के लिए उपयोग कर सकते हैं : एक ओबीजेसी विधि के रूप में:
-(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();
}
अब पूरा करें कॉलबैक(); शानदार काम करता है और उम्मीद के अनुसार। - क्या यह करने के लिए उपयुक्त तरीका है
Passing 'void (^__strong)(int, int, void *)' to parameter of incompatible type 'void (*)(int, int, void *)'
तो उत्सुक हूँ: लेकिन मैं एक संकलक चेतावनी/त्रुटि जो मैं प्रगति कॉलबैक के लिए शांत नहीं कर सकता है?
धन्यवाद,
डीडब्ल्यू।
सबसे लवली! और एआरसी के लिए __bridge की आवश्यकता है। शर्मिंदा है कि किसी को कॉलबैक() के बीच में होना चाहिए - यानी कि कोई प्रगति को पास नहीं कर सकता है (void (*) (int, int, void *)) अपने शून्य (^ __ मजबूत) (int, int, शून्य *) सीधे। –
@ Dirk-WillemvanGulik - ब्लॉक के स्वचालित पासिंग का समर्थन करने का एकमात्र उचित तरीका, यानी एक फंक्शन पॉइंटर (केवल एक कोड सूचक) के रूप में बंद करने के लिए कोड कोड (कोड पॉइंटर + पर्यावरण) को गतिशील रूप से कोड स्टब्स उत्पन्न करना होगा; और इसमें कई कमीएं हैं। सी में सामान्य पैटर्न एक फ़ंक्शन पॉइंटर निर्दिष्ट करना है जो आमतौर पर 'शून्य *' प्रकार का होता है, जिसे उपयोगकर्ता द्वारा परिभाषित वातावरण को पारित करने के लिए उपयोग किया जा सकता है और इस प्रकार मैन्युअल रूप से बंद हो जाता है - और openssl उस पैटर्न और समाधान का पालन करता है उपरोक्त इसका उपयोग करता है। – CRD
साफ़ करें। एक बार फिर धन्यवाद!)।NSStackBlock में खोद गया है और कुल समझ में आता है। –