iOS5で追加された新しいsendAsynchronousRequestを使用しようとしています。 モデルクラス(File)には、サーバーからデータを要求し、このデータをモデルオブジェクトを作成したコントローラクラス(FilesController)に渡すメソッドがあります。 NSLogsに示す方法sendAsynchronousRequest with tableView描画時のリロードデータの遅延
[File findAll:conditions completionHandler:^(NSArray *files) {
dataSource = files;
NSLog(@"set");
[self.tableView reloadData];
NSLog(@"reload");
activityIndicator.hidden = TRUE;
}];
コンソールで私はすぐに見ることができる:
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
NSArray *decodedResponse = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSArray *files = [self _dictionariesToFiles:decodedResponse];
handler(files);
}];
コントローラクラスは、このようにそれを使用する:
モデルクラスは、次のコードと方法を有します"set"と "reload"メッセージが表示されますが、テーブルとインジケータは数秒(5-10秒)経過するまで変化しません。
誰かがどこに問題があるか知っていますか?
ありがとうございました。
PD:非同期要求を互換性のある同期されたもので変更しましたが、問題が解消されましたが、このために非同期要求を使用します。
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSArray *decodedResponse = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:nil];
NSArray *files = [self _dictionariesToFiles:decodedResponse];
handler(files);
mainQueueはメインスレッドで実行されるためです。これはすべてのUIの処理が行われる場所です。 – greenisus
@Rscorreia greenisusは正しい私がこれを発見するまで私はあなたと同じ問題を抱えていた。 –
@greenisusそれでは、どのようにして迅速に動作するように非同期リクエストをどうやって取得しますか? '' '[' 'NSOperationQueue mainQueue]' 'を実行すると、最初に非同期要求を使用する目的を破るメインスレッドに置かれます。 – Supertecnoboff