Из других вопросов мне кажется, что все, что мне нужно сделать, это добавить __block перед моей переменной, однако, похоже, он не работает для меня.Как назначить переменную внутри блока?
Внутри блока маркер правильно назначается при проверке с помощью NSLog(). Если я проверю его снова перед токеном возврата; он становится NULL.
- (NSString *)extractTokenFromURL:(NSURL *)tokenURL
{
__block NSString *token = nil;
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]
delegate:self
delegateQueue:nil];
[[session dataTaskWithURL:self.tokenURL
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (!error) {
NSHTTPURLResponse *httpResp = (NSHTTPURLResponse*) response;
if (httpResp.statusCode == 200) {
NSString *content = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSRange divRange = [content rangeOfString:@"<div id='token' style='display:none;'>" options:NSCaseInsensitiveSearch];
if (divRange.location != NSNotFound) {
NSRange endDivRange;
endDivRange.location = divRange.length + divRange.location;
endDivRange.length = [content length] - endDivRange.location;
endDivRange = [content rangeOfString:@"</div>" options:NSCaseInsensitiveSearch range:endDivRange];
if (endDivRange.location != NSNotFound) {
divRange.location += divRange.length;
divRange.length = endDivRange.location - divRange.location;
dispatch_async(dispatch_get_main_queue(), ^{
token = [content substringWithRange:divRange];
});
}
}
}
}
}] resume];
return token;
}
Спасибо, можно ли получить пример кода? –
Я обновил свой ответ. Взглянуть! –
Спасибо, что сработало отлично. –