2016-03-14 10 views
0

Позвольте мне уточнить мой вопрос. Я хочу, чтобы общий общий класс вызывал веб-сервис. А также я хочу обработать данные и ошибку, которые я получаю в ответ, используя блок.Общий общий класс для вызова webservice

Я получил ответ для этого. Как Амин сказал, что я могу сделать общий insctance, как показано ниже:

+ (instancetype)sharedInstance 
{ 
static NetworkManager *sharedInstance = nil; 
static dispatch_once_t onceToken; 
dispatch_once(&onceToken, ^{ 
    sharedInstance = [[NetworkManager alloc]init]; 
    NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration]; 
    session = [NSURLSession sessionWithConfiguration:sessionConfig delegate:sharedInstance delegateQueue:nil]; 
}); 
return sharedInstance; 
} 

После того, что я могу определить метод, как показано ниже:

-(void) fetchDataForURL : (NSString*)urlString postData:(NSDictionary*)dataDic WithCompletionBlock : (void(^) (NSDictionary *responseDictionary, NSError *error)) completionBlock 
{ 
    // sending request here using NSURlConnection or NSURLSession 

    // whatever data I get here I can get that data in the completionBlock declared in the method 

     completionBlock(jsonDic, error); 
} 

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

Надеюсь, я сделал это немного ясно. Спасибо всем за вашу помощь.

+0

Какой вопрос ...? вам нужен пример кода NSURLSession? – UlyssesR

+0

Я думаю, что требование - это один класс модели, который обрабатывает весь вызов webservice с использованием NSURLSession, правильно? –

ответ

1

Я довольно не уверен, что вы хотите сделать тоже. В основном я понимаю ваш Q таким образом, что вы хотите получить ответы всех запросов в одном общем экземпляре класса NetworkManager? Правильно?

Прежде всего, вы должны подумать о своем дизайне. «Сбор всех в одном» похож на глобальный запах кода var. Однако ...

A. Создайте общий экземпляр сетевого менеджера. Это обычная модель:

@implemenation NetworkManager 
… 
+ (instancetype)sharedInstance 
{ 
    static NetworkManager *sharedInstance = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, 
    ^{ 
    sharedInstance = [[NetworkManager alloc] init]; 
    }); 
    return sharedInstance; 
} 

B. Используйте общий экземпляр в блоке завершения. Например:

[NSURLSession dataTaskWithURL:… completionHandler: 
^(NSData *data, NSURLResponse *response, NSError *error) 
{ 
    NetworkManager *networkManager = [NetworkManager sharedInstance]; 
    [networkManager processData:data]; // Or whatever you want to do. 
} 

Кроме того, было бы полезно установить диспетчер сети в качестве делегата сеанса.

+0

Спасибо Амин. Я хотел этого. Мое другое сомнение в том, как я получу ** данные ** из блока в другом классе. –

+0

Снова я не уверен, что вы хотите сделать. Но если вы хотите получить данные во многих случаях многих классов, сначала это хорошая идея (прочитайте вступительную часть моего ответа), а во-вторых, просто используйте этот экземпляр в блоке. –

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