2012-06-22 13 views
7

के भीतर AFNetworking से सफलता विफलता ब्लॉक को लपेटना मुझे अपनी लाइब्रेरी लिखने के रूप में एएफनेटवर्किंग कॉल से प्रतिक्रिया को समाहित करने की आवश्यकता है। इस कोड को मुझे करीब हो जाता है:एक विधि

MyDevice *devices = [[MyDevice alloc] init]; 
    [devices getDevices:@"devices.json?user_id=10" success:^(AFHTTPRequestOperation *operation, id responseObject) { 

    ... can process json object here ... 

} 

- (void)getDevices:(NSString *)netPath success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success 
    failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error)) failure { 
    [[MyApiClient sharedDeviceServiceInstance] getPath:[NSString stringWithFormat:@"%@", netPath] 
     parameters:nil success:success failure:failure]; 
} 

हालांकि, मैं getDevices पर लौटने से पहले getPath से लौटे json वस्तु डेटा की प्रक्रिया करने की जरूरत है()। मैं इस की कोशिश की है:

- (void)getDevices:(NSString *)netPath success:(void (^)(id myResults))success 
     failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error)) failure { 

    [[MyApiClient sharedDeviceServiceInstance] getPath:[NSString stringWithFormat:@"%@", netPath] 
    parameters:nil 
    success:^(AFHTTPRequestOperation *operation, id responseObject) 
    { 
    ... can process json object here ... 
    }       
    failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    ... process errors here ... 
    }]; 
} 

लेकिन अब वहाँ कोई कॉल getDevices को वापस आ गया है()। तो मैं getDevices & में जेसन ऑब्जेक्ट को कैसे संसाधित करूं? सहायता की सराहना करें, क्योंकि मैं ब्लॉक करने के लिए नया हूं।

उत्तर

10

यह करना वास्तव में आसान है: बस इसे फ़ंक्शन की तरह कॉल करके ब्लॉक को आज़माएं।

- (void)getDevices:(NSString *)netPath 
      success:(void (^)(id myResults))success 
      failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error)) failure 
{ 
    [[MyApiClient sharedDeviceServiceInstance] 
    getPath:netPath 
    parameters:nil 
    success:^(AFHTTPRequestOperation *operation, id responseObject) 
    { 
     id myResults = nil; 
     // ... can process json object here ... 
     success(myResults); 
    }       
    failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     // ... process errors here ... 
     failure(operation, error); 
    }]; 
} 

संपादित करें:

कोड आप पोस्ट मुझे लगता है कि निम्नलिखित इंटरफेस और अधिक स्पष्ट हो जाएगा के आधार पर:

typedef void(^tFailureBlock)(NSError *error); 

- (void)getDevicesForUserID:(NSString *)userID 
        success:(void (^)(NSArray* devices))successBlock 
        failure:(tFailureBlock)failureBlock; 
+0

आप phix23 धन्यवाद! "सफलता (myResults) जोड़कर;" GetPath() सफलता ब्लॉक के लिए सब कुछ अपेक्षित काम करता है। सुपर त्वरित प्रतिक्रिया के लिए बहुत धन्यवाद। - दान – Dan

+0

स्पष्टता टिप्पणियों की भी सराहना करते हैं। कार्यक्षमता पर ध्यान केंद्रित कर रहे थे, लेकिन इन सुझावों को अंतिम संस्करण में शामिल करेंगे। – Dan

+0

मैं चाहता हूं कि यह getFevices तेजी से काम करे। क्या आप इसे तेजी से बदल सकते हैं –

संबंधित मुद्दे