3

テーブルビューセルをクリックすると、しばらくの間(次のページが完全に読み込まれるまで)同じテーブルビューになり、次のビューが表示されます..

テーブルビューセルをクリックすると、すぐに次のページに移動し、読み込みページのポップアップが表示されます..

私はimpActivityAgentを試してみましたが、次のページに入るときにアラートビューを表示しようとしました(ただし、ビューは前のページ、つまりテーブルビューのものです)..しかし..ページを完全にロードするため、時間がかかり、アラートが表示されます..

次のページでは、時間がかかるデータを投稿して解析しています。その間、アクティビティインジケーターを表示したいと思います..

私は多くの方法を試しましたが、それでも最初に次のページを完全にロードしてから、コンテンツまたはアラートビューまたはアクティビティインジケーターを表示し、テーブルビューセルをクリックしたときにアクティビティインジケーターを表示できません..

私のコード:

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

解析を処理するために、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

}
于 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 に答える