1. ホーム
  2. objective-c

[解決済み] MPProgressHUDとNSSessionを使用したデータシンクの読み込み

2022-01-30 22:48:08

質問

非同期でデータを読み込むメソッドがあります。

-(void)loadingDataAsynchronously{

    NSURL *url = [NSURL URLWithString:@"http://vbahrain.azurewebsites.net/api/yearapi"];

    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];


    NSURLSession *session = [NSURLSession sharedSession];

    NSURLSessionDownloadTask  *task = [session downloadTaskWithRequest:request completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {

        NSData *data = [[NSData alloc] initWithContentsOfURL:location];


        NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];

        self.yearBucket = [NSMutableArray array];

        for (NSDictionary * dict in array) {

            Year *year = [[Year alloc ]init];

            year.yearName =[dict objectForKey:@"Year"];
            year.speeches = [dict objectForKey:@"Speeches"];

            [self.yearBucket addObject:year];


        }

        dispatch_async(dispatch_get_main_queue(), ^{


            [self.tableView reloadData];

        });



    }];
    [task resume];
}

これは、MPProgressHUDを読み込むために使っているコードです。

 - (void)viewDidLoad
{
    [super viewDidLoad];

    HUD = [[MBProgressHUD alloc] initWithView:self.view];
    [self.view addSubview:HUD];

    HUD.mode = MBProgressHUDModeDeterminate;
    HUD.labelText = @"Loading";
    HUD.delegate = self;


    [HUD showWhileExecuting:@selector(loadingDataAsynchronously) onTarget:self withObject:Nil animated:YES];


}

MPProgressHUDが表示され、一瞬で消えてしまいます。バックグラウンドのスレッドでデータのロードに関する実際の進行状況を表示するために、MPProgressHUDを表示するにはどうすればよいでしょうか。

どのように解決するのですか?

の中にあるHUDを削除してみてください。 loadingDataAsynchronously メソッドを使用します。

 - (void)viewDidLoad
{
    [super viewDidLoad];

   [MBProgressHUD showHUDAddedTo:self.view animated:YES];
   dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
       [self loadingDataAsynchronously];
   });


}

-(void)loadingDataAsynchronously{

    NSURL *url = [NSURL URLWithString:@"http://vbahrain.azurewebsites.net/api/yearapi"];

    ...

    dispatch_async(dispatch_get_main_queue(), ^{

        [self.tableView reloadData];

        [MBProgressHUD hideHUDForView:self.view animated:YES];

    });

    ...

}