ios - 在 IOS 中使用 GCD 下载图像时如何更新标签文本

标签 ios multithreading uilabel grand-central-dispatch

我使用 GCD 从服务器下载图像并更新 UILabel 上的处理,然后将标签打印到屏幕上(例如:它将打印到屏幕上:“正在下载:3/15 图像”)

但开头的标签是:“正在下载:0/15 图片”。然后当它下载完成时,标签是“正在下载:15/15 图片”。用户看不到下载过程。

我想要的是用户可以看到这样的处理: “正在下载:1/15 图片”,“正在下载:2/15 图片”,“正在下载:3/15 图片”,...,“正在下载:15/15 图片”。

这是我的代码:

 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        //Here your non-main thread.
        NSString *text;

        for (int i = 0;i<[self.pageImages count];i++){
            NSString *image = [self.pageImages objectAtIndex:i];

            [dataManage downloadImagesFromUrl: image ];
            text = [NSString stringWithFormat:@“Downloading %d/%d”,i,self.pageImages.count];
        }

        dispatch_async(dispatch_get_main_queue(), ^{
            //Here you returns to main thread.
            [downloadLabel setText:text];
        });
    });

最佳答案

移动

dispatch_async(dispatch_get_main_queue(), ^{
    //Here you returns to main thread.
    [downloadLabel setText:text];
});

for 循环中,以便在每次下载后更新 UI(而不是仅在所有迭代结束时)。

关于ios - 在 IOS 中使用 GCD 下载图像时如何更新标签文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23221579/

相关文章:

java - 如何更改由 J2Objc 生成的文件

xcode - 如何模拟多线程环境进行单元测试?

ios - iOS换行更均匀吗?

ios - 识别标签中显示的属性字符串中的图像点击

xcode - 当 UILabel 太短时不显示...

ios - AWS graphql @connection没有按预期返回数组?

iphone - 将另一个 Nib 加载到 viewController 中

ios - cellForRow At IndexPath 执行一次太少?

multithreading - LuaLanes 无法在函数之间传递全局变量(在单 channel 中)

python - 如何从进程或线程实例返回值?