0

Я пытаюсь использовать NSScanner для фильтрации моего ответа из AFHTTPRequestOperation. Проблема в том, что я не могу вернуть строку из AFHTTPRequestOperation в моем методе NSString. У кого-нибудь есть идеи?AFNetworking NSString Response

-(NSString*)queryResponseID { 
//Find ID from https request 
NSLog(@"Finding Location ID"); 
NSString *[email protected]""; 
NSString *clientID = @"myclientID"; 
if (!clientID) { 
    NSLog(@"Need Clinet ID"); 

} 




NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://api.domain.com/client_id=%@",clientID]]]; 



AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] 
            initWithRequest:request]; 
operation.responseSerializer = [AFJSONResponseSerializer serializer]; 
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 

    NSLog(@"%@", responseObject); 


} failure:nil]; 
[operation start]; 

queryResponseID = operation.responseString; 


return queryResponseID; 



} 

ответ

0

Поскольку ответ является асинхронным, поэтому он не прибыл к моменту возвращения метода. Вам нужно собрать строку в блоке завершения успеха и обработать ее там (или в методе, который называется оттуда), и удалить оператор return, который вы используете в настоящее время.


Кроме того, я бы сказал, что то, что вы пытаетесь сделать, можно сделать проще с помощью другого подхода. Вместо того, чтобы пытаться использовать NSScanner в сыром тексте JSON, вы должны фильтровать фактические объекты данных. AFNetworking уже распаковывает их для вас (в responseObject), воспользуйтесь этим и воспользуйтесь комбинацией KVC, valueForKey: (NSArray) и NSPredicate, чтобы извлечь нужную информацию.

+0

Я пробовал это, и я получаю следующую ошибку: несовместимые типы указателей блоков, отправляющие 'NSString * (^) (AFHTTPRequestOperation * __ strong, __strong id)' в параметр типа 'void (^) (AFHTTPRequestOperation * __ strong, __strong id) ' –

+0

Вы не можете использовать возврат, вообще, блок успеха обрабатывает данные/вызывает метод для его обработки. Возвращение происходит немедленно (синхронно), и это невозможно в этой ситуации. – Wain

+0

Итак, как мне получить те же данные, которые печатаются в NSLog для NSString? –

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

  • Нет связанных вопросов^_^