2016-03-31 12 views
2

タブバーコントローラがあります。タブの1つに3つのコンテナビューコントローラがあります。 1つだけが提示され、他のものは現時点で削除されます。これらのコントローラのビューはxibで定義されています。ビューコントローラを押した後に予期しない遅延が発生しました

これらのコンテナの1つでは、私はテーブルビューを持っています。

私がセルをクリックすると、コントローラをプッシュする必要があります。

初めてアプリケーションを起動すると、View Controllerをプッシュするときに遅延が発生します。私がテーブルビューに戻り、もう一度押すと、遅延はありません。

新しいコントローラーのdidSelectRowAtIndexPathviewDidLoadには印刷時間があり、遅延は2〜4秒です。

EventDetailsViewController *eventDetailsVc = [[EventDetailsViewController alloc]init]; 
Events *event = [self.events objectAtIndex:indexPath.row]; 
eventDetailsVc.curentEvent = event; 
NSDateFormatter *f2 = [[NSDateFormatter alloc] init]; 
[f2 setDateFormat:@"dd MMMM, hh:mm:ss.SSS a"]; 
NSLog([f2 stringFromDate:[NSDate date]]); 

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self.navigationController pushViewController:eventDetailsVc animated:YES]; 
}); 

通常のビューコントローラをプッシュするとき、私はdispatch_asyncを使用していないが、これは私が見つけた提案の解決策の一つであった:

これは私がビューコントローラをプッシュするために使用するコードです。私もself.parentViewController.navigationController、同じ結果を試してみました。

私はこの遅れについて何をすべきかわかりません、誰かが私を助けることができました。

ありがとうございました。

+0

おそらくあなたのメインスレッドは何とかブロックされていますね。 – kirander

+0

init()またはviewdidload()メソッドでmain uiをブロックするタスクを実行していますか? –

+0

ありがとうございます。私はviewDidAppearでデータをダウンロードします。最初の回答のコメントの例を見ることができます。 – Paki

答えて

1

ほとんどの場合、子ビューコントローラが問題になります。 viewDidLoad/loadViewが高価な操作(インターネットからのデータのダウンロードなど)を開始しないようにしてください。

viewDidLoad & loadViewは、ビューコントローラが初めて表示されたときに1回だけ起動します。ビュープロパティが設定されると、これらのメソッドはもう起動しません。

コンテンツの読み込みは、バックグラウンドスレッド(AFNetworkingなどのライブラリを使用している可能性があります)で行う必要があります。通常、viewWillAppearまたはviewDidAppearで開始する必要があります。

+0

ウォルフガング、お返事ありがとうございます。ビューではload iはtableViewのデリゲートとデータソースのみを自己に割り当てます。 viewDidAppearではWebからデータをダウンロードします。私はAFNetworkingを使用していない、私はこのプロジェクトでそれを行うことはできません。これは私がWebサービスを呼び出す方法です [NSURLConnection sendAsynchronousRequest:urlRequestキュー:[NSOperationQueue currentQueue] completionHandler:^(NSURLResponse *レスポンス、NSData *データ、NSError * connectionError){ – Paki

+0

ネットワークコードを無効にして、スロー。それが本当であれば、xibを読み込む際にいくつかの問題があるかもしれません。それ以外の場合は、ネットワークコードまたは解析コードに問題があります。 –

関連する問題