2012-06-22 12 views
7

Bir kitap yazarken kendi yöntemimin içinde AFNetworking çağrılarının yanıtını kapsüllemem gerekiyor. Bu kod yakın beni alır:Bir yöntem içinde AFNetworking'den başarılı hata bloklarını sarmak

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]; 
} 

Ancak, ben getDevices dönmeden önce getPath döndü json nesnesi verilerin işlenmesi için gereken(). Bu denedim:

- (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 ... 
    }]; 
} 

Ama şimdi hiçbir çağrı getDevices geri vardır(). Peki json nesnesini getDevices &'da nasıl işleyebilirim? Blokları yenilediğim için yardımı takdir ediyorum.

cevap

10

Bunu yapmak gerçekten çok kolay: Sadece bloğu bir işlev gibi çağırarak çağırın.

- (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); 
    }]; 
} 

DÜZENLEME: Eğer ben aşağıdaki arayüz daha net olacağını düşünüyorum yayınlanan kod dayanarak

:

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

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

sen phix23 ederiz! "Başarı (myResults)" ekleyerek; " getPath() başarı bloğu, her şeyin beklendiği gibi çalışmasını sağlar. Süper hızlı yanıt için çok teşekkürler. - Dan – Dan

+0

Açıklık yorumlarını da takdir et. İşlevselliğe odaklanmaktaydı, ancak bu önerileri nihai sürümde birleştirecek. – Dan

+0

Bu getDevices uygulamasının hızlıca çalışmasını istiyorum. –

İlgili konular