2015-12-28 4 views
2

Мы знаем, что мы можем получить возвращаемое значение из нормального метода, например:AFNetworking: Повторное использование метода

-(NSString*)ASimpleFunction:(NSString*)str{ 
    return str; 
} 

Вызов этого: [self ASimpleFunction:@"abc"] вернется "abc".

Если я заявил в одноплодной классе, так что я могу использовать его в любом месте нравится:

+(NSString*)ASimpleFunction:(NSString*)str{ 
    return str; 
} 

Назвав его: [Singleton ASimpleFunction:@"xyz"] вернется "xyz".

Следовательно выше методы, объявленный в классе Singleton можно получить доступ/Повторно используемый из любых самого класса имени т.е. Singleton.

Кроме того, я хочу, чтобы повторно использовать метод AFNetworking, я передам NSDictionary параметров, NSString для URL и т.д. Но дело в том, Success and Failure блоки AFNetworking в не возвращают значения. Таким образом, я не могу получить reponseObject по успеху и error при сбое в ответ.

Я делаю это правильно, записывая один и тот же код i.e, url, parameters, [success ..]/[failure ..] снова снова для каждого сетевого запроса?

Или есть хорошая предлагаемая архитектура?

P.S - У меня есть много для этого, но ничего не найдено.

+1

Для этого вам необходимо создать свой собственный вспомогательный класс. Ваше обучение поможет вам в будущем. Попробуйте найти информацию о том, как получить данные из блока ... и т. Д. –

+1

Это вопрос дизайна. Вы можете создать свой собственный класс BaseConnection, который будет использовать AFNetworking. Затем создайте подкласс сформированного класса и используйте методы для создания запроса и получения от него блока завершения. –

+0

@AshishKakkad - Прямо на месте. Мне нужно научиться помощникам и Блокам. Несколько ответов ниже, попробуют их. Благодаря! –

ответ

0

Вот как вы можете создать свой собственный класс-помощник и использовать в любом месте.

Во-первых, давайте создадим метод для вызова AFNetworking ответа, успех и неудачи:

+(void)getWebserviceWithURL:(NSString*)strUrl withParam:(NSDictionary*)dictParam withCompletion:(void(^)(NSDictionary*response))completion withFailure:(void(^)(NSDictionary*response))failure withLoadingText:(NSString*)text 
{ 
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 

    AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments]; 

    manager.responseSerializer = responseSerializer; 

    [manager GET:strUrl parameters:dictParam success:^(AFHTTPRequestOperation *operation, id responseObject) { 
//  [[Helper sharedInstance] dismissProgressBar]; 
     completion(responseObject); 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     failure([NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:error, operation, nil] forKeys:[NSArray arrayWithObjects:@"error",@"operation", nil]]); 
//  [[Helper sharedInstance] dismissProgressBar]; 
    }]; 
} 

Теперь вы можете создать свой собственный метод и получить ответ, успехи и неудачи с помощью блока завершения:

- (void)WebSeries:(void(^)(bool status, NSMutableArray *seriesResponseData, NSString *compMessage))completion 
{ 
    //NSDictionary *dict = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"data", nil] forKeys:[NSArray arrayWithObjects:@"iComicBookId", nil]]; 

     NSDictionary *dict = [NSDictionary dictionaryWithObject:@"1" forKey:@"fk_iWebSeriesId"]; 


    [Helper postWebserviceWithURL:EPISODESURL withParam:dict withCompletion:^(NSDictionary *response) { 
     NSLog(@"%@",response); 
     NSMutableArray *webSeriesData = response[@"data"]; 

     completion(YES, webSeriesData, response[@"msg"]); 

    } withFailure:^(NSDictionary *response) { 

    } withLoadingText:@"Loading"]; 
} 

Надеюсь это поможет!

Смежные вопросы