3

当我单击表格视图单元格时,它将在同一个表格视图中一段时间​​(直到下一页完全加载)然后它将显示下一个视图..

我想点击表格视图单元格,它应该立即转到下一页并显示加载页面弹出窗口..

我已经尝试过 impActivityAgent 并且还尝试在它进入下一页时显示警报视图(但视图是前一页,即表格视图)..但是..它完全加载页面,这需要时间然后显示警报..

在下一页我发布和解析需要时间的数据,在此期间我想显示活动指示器..

我已经尝试了很多方法,但仍然是它首先完全加载下一页然后显示内容或 alertView 或活动指示器,当单击表格视图单元格时我无法显示活动指示器..

我的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    nextTableViewController *doc = [[nextTableViewController alloc]initWithNibName:@"nextTableViewController" bundle:nil];
    [self.navigationController pushViewController:doc animated:YES];
}

和下一个视图控制器是:

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[[ImpActivityAgent defaultAgent] makeBusy:YES];

NSURL *loadUrl = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@/gmail.com",inputURL]];
htmlData = [NSData dataWithContentsOfURL:loadUrl];
self.htmlSTR = [[NSString alloc] initWithData:htmlData encoding:NSUTF8StringEncoding];
[self parseHTML];
}

在解析函数中,我正在解析我使用“hpple”解析器在 HTML 格式中作为响应获得的内容。

4

4 回答 4

2

只需使用一个单独的线程来处理解析。希望这段代码对您有所帮助。

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[[ImpActivityAgent defaultAgent] makeBusy:YES];

[NSThread detachNewThreadSelector:@selector(newMethodForParsing) toTarget:self withObject:nil];

}


-(void)newMethodForParsing
{
NSURL *loadUrl = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@/gmail.com",inputURL]];
htmlData = [NSData dataWithContentsOfURL:loadUrl];
self.htmlSTR = [[NSString alloc] initWithData:htmlData encoding:NSUTF8StringEncoding];
[self parseHTML];

[tableView reload]; // tableView refers to your table view name

}
于 2013-04-08T05:14:46.700 回答
1

试试这个

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [[ImpActivityAgent defaultAgent] makeBusy:YES];
    [self performSelectorInBackground:@selector(start) withObject:Nil];
    //or you can use after delay then no need to use perform selector on main thread in start method.
    [self performSelector:@selector(start) withObject:nil afterDelay:0.5];
}

-(void)start
{
    NSURL *loadUrl = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@/gmail.com",inputURL]];
    htmlData = [NSData dataWithContentsOfURL:loadUrl];
    self.htmlSTR = [[NSString alloc] initWithData:htmlData encoding:NSUTF8StringEncoding];
    [self performSelectorOnMainThread:@selector(parseHTML) withObject:Nil waitUntilDone:YES];
}
于 2013-04-08T05:26:32.007 回答
0

尝试一下....

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(newMethodForParsing) userInfo:nil repeats:NO];
}

-(void)newMethodForParsing
{
NSURL *loadUrl = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@/gmail.com",inputURL]];
htmlData = [NSData dataWithContentsOfURL:loadUrl];
self.htmlSTR = [[NSString alloc] initWithData:htmlData encoding:NSUTF8StringEncoding];
[self parseHTML];
}
于 2013-04-08T05:26:49.653 回答
0

Ganapathy 的回答会泄漏内存,你需要在方法中放置一个 autoreleasepool。这是一种更简单的方法。这将在主线程上运行,但在队列中的现有任务之后。

如果您希望它在不同的线程上运行,请替换为dispatch_get_global_queue()

- (void)viewDidLoad
{
   [super viewDidLoad];
   // Do any additional setup after loading the view from its nib.
   [[ImpActivityAgent defaultAgent] makeBusy:YES];

   dispatch_async(dispatch_get_main_queue(), ^{

      NSURL *loadUrl = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@/gmail.com",inputURL]];
      htmlData = [NSData dataWithContentsOfURL:loadUrl];
      self.htmlSTR = [[NSString alloc] initWithData:htmlData encoding:NSUTF8StringEncoding];
      [self parseHTML];
   )
}
于 2013-11-06T13:44:55.293 回答