Общий разделяемый класс для вызова веб-сервиса
Позвольте мне прояснить мой вопрос. Я хочу, чтобы общий общий класс вызывал веб-сервис. А также я хочу обработать данные и ошибки, которые я получаю в ответе, используя блок.
Я получил ответ за это. Как сказал Амин, я могу сделать общую проверку, как показано ниже:
+ (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.
}
Кроме того, может быть полезно установить администратора сети в качестве делегата сеанса.