0

アプリで、リモート レスト サービスにヒットするタイプ アヘッドを作成しています。現在の問題は、接続に NSUrl を使用していることです。これは同期であり、json オブジェクトをループする量が多いため、解析に時間がかかります。そのため、検索中に UI がフリーズします。

したがって、私はやろうと決めました:

[NSURLConnection sendAsynchronousRequest:myRequest
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response, NSData *taxiData,    NSError *error) {

少し良くなったようですが、ほとんどの処理がメイン キューに関連付けられた完了ハンドラで行われるため、まだハングします。

それで、私は自分の NSOperationsQueue を作成するか、dispatch_asynch を使用してみました:

[NSURLConnection sendAsynchronousRequest:myRequest
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response, NSData *taxiData, NSError *error) {

           dispatch_queue_t typeAheadQueue = dispatch_queue_create("typeAhead", NULL);

           dispatch_async(typeAheadQueue, ^ { 

}];

そしてそれはうまくいきます。唯一の問題は、uitableview がデータを更新するのに 10 秒ほどかかることです。中断することなく入力できるようになりましたが、uitableview の更新に大きな遅延があります。

私はこれに近づいていますか?どんな助けでも大歓迎です。

ありがとう!

4

2 に答える 2

1

このスレッドを確認してください:ユーザーがまだ UI を使用できる間にバックグラウンドでプロセスを実行する

nsurlconnection 呼び出し全体を別のキューに入れることを検討し、ユーザー インターフェイスを更新するときが来たら、Mundi が提案したように get_main_queue を使用します。

于 2012-11-24T22:00:53.820 に答える
0

メインキューにシグナルを送ることができます

dispatch_async(dispatch_get_main_queue(), ^{
   [self.tableView reloadData];
});
于 2012-11-24T21:22:03.670 に答える