Общий разделяемый класс для вызова веб-сервиса

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

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

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

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

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

1 ответ

Решение

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

Прежде всего, вы должны переосмыслить свой дизайн. "Собирать все в одном" - это как запах глобального кода. Тем не мение, …

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

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

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

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

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

Другие вопросы по тегам