Я не могу сделать кнопку back
(предыдущая страница в навигации), работая во время процесса анализа html. То, что я пытаюсь сделать, это разбор html и получение pdf-файла на viewDidAppear
. В течение этого времени я хочу, чтобы кнопка back
была включена, потому что синтаксический анализ может занять много времени. Поэтому пользователи могут решить оставить процесс разбора.Нажатие кнопки не работает во время разбора
вот мой код:
-(void)viewDidAppear:(BOOL)animated
{
[self performSelector:@selector(getPDFUrl) withObject:nil afterDelay:0];
}
-(void) getPDFUrl
{
NSURL *programURL = [NSURL URLWithString:@"http://www.example.com/somepdf/"];
NSData *programHtmlData;
@try
{
programHtmlData = [NSData dataWithContentsOfURL:programURL];
}
@catch(NSException* ex)
{}
// 2
TFHpple *programHTMLParser = [TFHpple hppleWithHTMLData:programHtmlData];
NSString *studiosXpathQueryString =
@"//div[@class='ultra_wrapper']/div[@class='container columns extra_pad boxed_lay centered']/div[@id='prk_ajax_container']/div[@id='centered_block']/div[@id='main_block']/div[@id='content']/div[@id='main']/div[@class='twelve columns sidebarized']/div[@class='prk_no_composer']/p/a";
NSArray *programNodes = [programHTMLParser searchWithXPathQuery:studiosXpathQueryString];
NSMutableArray *activities = [[NSMutableArray alloc] init];
Tutorial *tutorial;
if (programNodes.count > 0) {
for (TFHppleElement *element in programNodes)
{
@try
{
tutorial = [[Tutorial alloc] init];
tutorial.url = [element objectForKey:@"href"];
}
@catch(NSException* ex)
{
}
}
NSURL *targetURL = [NSURL URLWithString:tutorial.url];
webView.scalesPageToFit=YES;
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
[webView loadRequest:request];
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"warning"
message:@"warning!"
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
}
Возможно, вы заблокировали основной поток, который должен соответствовать пользовательскому интерфейсу. Вам нужно заставить синтаксический анализатор работать в фоновом режиме, поэтому взгляните на 'performSelectorInBackground: withObject:' (https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/classes/nsobject_class/reference/ reference.html # // apple_ref/occ/instm/NSObject/performSelectorInBackground: withObject :) – Popeye