मैं कई आपरेशनों (वे अनुरोध AFNetworking रहे हैं) पूरा होने के ब्लॉक है कि कुछ समय निष्पादित करने के लिए लेता है, और एक कोर डाटा वस्तु अंत में बचाया जाना चाहिए के साथ है सभी अनुरोधों का।तक प्रतीक्षा कई नेटवर्किंग अनुरोध सभी निष्पादित किया है - उनके पूरा होने के ब्लॉक सहित
MyCoreDataObject *coreDataObject;
AFHTTPRequestOperation *operation1 = [[AFHTTPRequestOperation alloc] initWithRequest:request1];
[operation1 setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
coreDataObject.attribute1 = responseObject;
sleep(5);
}];
[operation1 start];
AFHTTPRequestOperation *operation2 = [[AFHTTPRequestOperation alloc] initWithRequest:request1];
[operation2 setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
coreDataObject.attribute2 = responseObject;
sleep(10);
}];
[operation1 operation2];
[context save:nil];
बेशक, यह काम नहीं करता है क्योंकि मैं चाहता हूं क्योंकि अनुरोध असीमित हैं। मैं बहुत की तरह एक NSOperationQueue जोड़ने की कोशिश की:
NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];
[operationQueue setMaxConcurrentOperationCount:2];
AFHTTPRequestOperation *operation1 = [[AFHTTPRequestOperation alloc] initWithRequest:request1];
[operation1 setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
coreDataObject.attribute1 = responseObject;
sleep(5);
}];
[operationQueue addOperation:operation1];
AFHTTPRequestOperation *operation2 = [[AFHTTPRequestOperation alloc] initWithRequest:request1];
[operation2 setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
coreDataObject.attribute2 = responseObject;
sleep(10);
}];
[operationQueue addOperation:operation2];
[imageQueue waitUntilAllOperationsAreFinished];
[context save:nil];
इसमें कुछ समय बेहतर लग रहा है। waitUntilAllOperationsAreFinished
का उपयोग करके, मेरी कतार वर्तमान थ्रेड को तब तक अवरुद्ध करती है जब तक कि मेरे अनुरोध समाप्त नहीं हो जाते हैं, लेकिन जब तक मेरी सफलता ब्लॉक समाप्त नहीं हो जाता है, जो वास्तव में मुझे चाहिए।
कैसे एक अच्छा तरीका में इस लक्ष्य को हासिल करने के बारे में कोई भी विचार?
धन्यवाद, यह अच्छी तरह से काम करता है। मुझे भी दिलचस्पी है कि थ्रेड को अवरुद्ध किए बिना यह कैसे प्राप्त किया जा सकता है। इसके लिए कोई विचार? – choise
उम, थ्रेड को अवरुद्ध नहीं करते हैं, तो "** ** एकाधिक ऑपरेशन निष्पादित होने तक प्रतीक्षा करें" का क्या मतलब हो सकता है? वैसे भी, यदि आप सभी समापन ब्लॉक चलाए जाने के बाद बस एक ब्लॉक चलाने के लिए चाहते हैं, तो आप 'dispatch_group_wait()' 'प्रेषण_ग्रुप_नोटिफ़ (समूह, कतार,^{...}) का उपयोग कर सकते हैं। –
शांत! धन्यवाद! – choise