0

私は(医師の画像、医師の名前)を示すUITableViewを持っています

cellForRowAtIndexPath関数では、次のように画像をフェッチしています。

 [NSURLConnection sendAsynchronousRequest:request
                                           queue:[NSOperationQueue mainQueue]
                               completionHandler:^(NSURLResponse * response,
                                                   NSData * data,
                                                   NSError * error) {
                                   if (!error){

                                           dispatch_async(dispatch_get_main_queue(), ^{
                                        updateCell.DRImage.image = [[UIImage alloc] initWithData:data];      
                                }];

問題は次のとおりです。下にすばやくスクロールすると、画像の読み込みが開始され、ほぼ 100 の画像が読み込まれます。次に、行をクリックして医師の詳細を表示すると、すべての画像が読み込まれるまでサーバーからデータを取得できません。読み込みを終了します (すべての非同期リクエストが終了するまで)。

次のコードを使用して、医師の詳細を取得しています。

SoapCall *Obj = [[SoapCall alloc] init];
NSString* Url=[[NSString alloc] initWithFormat:@"%@/doctorsDetails.php?i=%@" , ServerUrl ,DoctorDataFromTableView.Doctor_ID];

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{

[Obj CallUrl:Url OnCompletion:^(NSMutableArray * Results , NSError * Error){

    dispatch_async(dispatch_get_main_queue(), ^{

        Nviews.text =[[Results objectAtIndex:0] objectForKey:@"numViews"];

        NComments.text =[[Results objectAtIndex:0] objectForKey:@"totComments"];
});
}];

注: SoapCall は、サーバーに非同期要求を行うために作成したカスタム クラスです。

私の質問は: 画像の読み込みをキャンセルする方法はありますか?

または、ドクターの詳細を別のスレッドにロードできますか???

4

1 に答える 1

0

「SDWebImage」という素晴らしいプロジェクトを見つけました

https://github.com/rs/SDWebImage

それは非常に高度な方法で使用NSoperationQueueNSOperation ています このプロジェクトは私にとって多くの時間を節約しました

于 2014-10-01T05:56:02.953 に答える