У меня есть метод, который возвращает строку обычно локально, но с резервной копией из Интернета. Я извлекал JSON с использованием dataWithContentsOfUrl, но хочу переключиться на использование объекта Session, который лучше подходит для пользовательского интерфейса, а также - если я не ошибаюсь - позволяет серверу установить sessionId на телефоне, однако я изо всех сил с асинхронной проблемой.
Со старым кодом я только что возвратил JSON, но я борюсь с тем, как сделать это для асинхронного результата. Я не могу изменить вызывающий метод, который возвращает строку. Что я могу сделать с асинхронным вызовом Api, чтобы использовать полученные данные?
асинхронный:
-(void)getAsyncAnswerFor:(NSString*) str {
NSString *surl = [NSString stringWithFormat: @"https://~.com//api.php?q=%@",str];
NSURL *url = [NSURL URLWithString:surl];
NSURLSessionDataTask *downloadTask = [[NSURLSession sharedSession]
dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
//HOW DO I PASS THIS BACK TO THE CALLING METHOD OR IS THAT IMPOSSIBLE
}];
[downloadTask resume];
}
синхронизация
-(NSString*)getAnswerFor:(NSString*) str {
NSError *error;
NSString *surl = [NSString stringWithFormat: @"https://~.com//api.php?q=%@",str];
NSData *data = [NSData dataWithContentsOfURL: [NSURL URLWithString:surl]];
NSMutableArray *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
//process JSON
if (error) {
return @"";
}
return @"processed JSON";
}
Буду признателен за любые предложения.
Если то, что я хочу сделать, абсолютно невозможно, возможно ли установить sessionID на телефоне без объекта Session? Я знаю, что установка идентификатора сеанса - не самый лучший подход, но я стараюсь избежать больших затрат на аутентификацию.