单击表格视图单元格时加载缓慢

Posted

技术标签:

【中文标题】单击表格视图单元格时加载缓慢【英文标题】:slow loading when clicked on table view cell 【发布时间】:2013-04-08 04:29:49 【问题描述】:

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

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

我已经尝试使用 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];

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

【问题讨论】:

在您选择行后检查是否有任何后台进程正在进行。贴一些相关代码。 不,没有后台进程正在进行.. @Raju,发布您的代码 发布您的 tableView:didSelectRowAtIndexPath: 代码,以及您在 viewDidLoad、viewDidAppear 等下一个控制器中所做的任何事情。 请用代码找到上面编辑过的问题.. 【参考方案1】:

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

- (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


【讨论】:

现在我得到了我需要的东西,但它没有调用“-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath”函数......它存在于 nextViewController.. 现在检查。更新了我的答案。解析完成后,您需要重新加载表格视图。 @Ganapathy:我怎样才能停止操作系统取消或在取消按钮上杀死这个线程?我正在使用“[NSThread cancelPreviousPerformRequestsWithTarget:self selector:@selector(newMethodForParsing) object:nil];”但它现在工作..【参考方案2】:

试试这个

-(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];

【讨论】:

【参考方案3】:

试试看……

- (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];

【讨论】:

【参考方案4】:

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];
   )

【讨论】:

以上是关于单击表格视图单元格时加载缓慢的主要内容,如果未能解决你的问题,请参考以下文章

滚动单元格时表格视图设置消失

表格视图在按钮单击时更新单元格时反弹

在单击表格单元格时推送新视图,这怎么可能? [关闭]

单击表格单元格时将变量值发送到下一个视图控制器

如何添加“加载更多”单元格,按下该单元格时会向表格视图添加更多行?

单击表格视图单元格时启动默认电子邮件应用程序 - IOS