代码之家  ›  专栏  ›  技术社区  ›  Christopher Sonny

我在调度主线程中更新MBProgressHUD时遇到问题

  •  0
  • Christopher Sonny  · 技术社区  · 2 年前

    我正在尝试更新控制器中的MBProgressHUD。 从只显示静态消息,我想把进度条/进度百分比显示上传过程给用户。

    YBWeakSelf;
    [[YBStorageManage shareManage]getCOSInfo:^(int code) {
        dispatch_async(dispatch_get_main_queue(), ^{
            if (code == 0) {
                [weakSelf startUpload];
            }
        });
    }];
    [self networkState];
    
    -(void)startUpload{
    YBWeakSelf;
    dispatch_group_t group = dispatch_group_create();
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
    
    NSString *filePath =_videoPath;
    //传图片
    
    dispatch_group_async(group, queue, ^{
        NSData *imageData = UIImagePNGRepresentation(_videoCoverImage);
    
        if (!imageData) {
            [MBProgressHUD hideHUD];
            [MBProgressHUD showError:YZMsg(@"请重新选择")];
            return;
        }
        UIImage *herfImg = [UIImage imageWithData:imageData];
        NSString *imageName = [PublicObj getNameBaseCurrentTime:@".png"];
        [[YBStorageManage shareManage]yb_storageImg:herfImg andName:imageName progress:^(CGFloat percent) {
            
        }complete:^(int code, NSString *key) {
            //图片成功
            [weakSelf uploadimagesuccess:key];
    
            dispatch_semaphore_signal(semaphore);
        }];
        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
    });
    
    dispatch_group_async(group, queue, ^{
        //传视频
        NSString *videoName = [PublicObj getNameBaseCurrentTime:@".mp4"];
    
        [[YBStorageManage shareManage]yb_storageVideoOrVoice:filePath andName:videoName progress:^(CGFloat percent) {
            
        } complete:^(int code, NSString *key) {
            //请求app业务服务器给标题
            [weakSelf uploadvideosuccess:key andTitle:mytitle];
            dispatch_semaphore_signal(semaphore);
        }];
        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
    });
    
    
    //上传水印视频
    
    NSString *mkfilePath =_videoWmkPath;
    
    dispatch_group_async(group, queue, ^{
        NSData *imageData = UIImagePNGRepresentation(_videoWmkCoverImage);
    
        if (!imageData) {
            [MBProgressHUD hideHUD];
            [MBProgressHUD showError:YZMsg(@"请重新选择")];
            return;
        }
        UIImage *herfImg = [UIImage imageWithData:imageData];
        NSString *imageName = [PublicObj getNameBaseCurrentTime:@"_mk .png"];
        [[YBStorageManage shareManage]yb_storageImg:herfImg andName:imageName progress:^(CGFloat percent) {
            
        }complete:^(int code, NSString *key) {
            //图片成功
            [weakSelf uploadWmkimagesuccess:key];
    
            dispatch_semaphore_signal(semaphore);
        }];
        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
    });
    
    dispatch_group_async(group, queue, ^{
        //传视频
        NSString *videoName = [PublicObj getNameBaseCurrentTime:@"_mk.mp4"];
    
        [[YBStorageManage shareManage]yb_storageVideoOrVoice:mkfilePath andName:videoName progress:^(CGFloat percent) {
            
        } complete:^(int code, NSString *key) {
            //请求app业务服务器给标题
            [weakSelf uploadvideoWmksuccess:key andTitle:mytitle];
            dispatch_semaphore_signal(semaphore);
        }];
        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
    });
    dispatch_group_notify(group, queue, ^{
        dispatch_async(dispatch_get_main_queue(), ^{
            [self requstAPPServceTitle:mytitle andVideo:_videokey andImage:_imagekey];
        });
        NSLog(@"任务完成执行");
    }); }
    

    如何更新MBProgressHUD以在那里设置进度条? 同时队列线程中有4个异步线程。 我想拿 progress:^(CGFloat percent) 并将其放入MBProgressHUD 由于这是一个更新视图进度,我不得不把它放在主线程中,对吧? 我试过好几次了,但总是坚持到最后。

    我试着在每个 进度:^(CGFloat百分比) 但它总是发出紫色警告说 Thread running at QOS_CLASS_USER_INITIATED waiting on a thread without a QoS class specified. Investigate ways to avoid priority inversions

    0 回复  |  直到 2 年前