आप अपनी विधि के लिए वापसी मूल्य बनाने के लिए समापन ब्लॉक का उपयोग नहीं कर सकते हैं। AFJSONRequestOperation
इसके काम को असीमित रूप से करता है। ऑपरेशन अभी भी काम कर रहा है, जबकि someFunction
वापस जा रहा है। सफलता और विफलता ब्लॉक आप परिणामस्वरूप मूल्य प्राप्त करते हैं जहां उन्हें जाने की आवश्यकता होती है।
यहां एक विकल्प कॉलर में आपके रैपर विधि के लिए एक तर्क के रूप में पास करना है ताकि समापन ब्लॉक सरणी को बंद कर सके।
- (void)goFetch:(id)caller
{
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success: ^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
[caller takeThisArrayAndShoveIt:[JSON valueForKey:@"posts"]];
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {}
}
आप अपने कॉलर को सफलतापूर्वक चलाने के लिए ब्लॉक बनाकर पास कर सकते हैं। फिर goFetch:
को अब यह जानने की आवश्यकता नहीं है कि कॉलर पर कौन से गुण मौजूद हैं।
- (void)goFetch:(void(^)(NSArray *))completion
{
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success: ^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
if(completion) completion([JSON valueForKey:@"posts"]);
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {}
}
स्रोत
2013-07-14 19:07:37
आप यह नहीं कर सकते हैं। चूंकि आप एक एसिंक्रोनस कॉल से निपट रहे हैं, इसलिए आपकी 'कुछ फ़ंक्शन' विधि वापस आने के लिए एक मूल्य होने से पहले वापस आ जाएगी। – rmaddy
मेरा सुझाव है कि आप एक कदम वापस लें और सोचें कि आपका कोड क्या करता है। आपको जल्द ही पता चलेगा कि आप जो चाहते हैं वह समझ में नहीं आता है। –
आप कार्य करने के लिए ब्लॉक पास कर सकते हैं जो सफलता या त्रुटि पर निष्पादित होगा। – stosha