gpt4 book ai didi

ios - 为什么 View 即使在我的线程上也没有更新?

转载 作者:行者123 更新时间:2023-12-01 19:00:30 25 4
gpt4 key购买 nike

我试图了解为什么在设置某些值时 View 没有更新。问题看起来微不足道,但我花了很多时间来找到问题 - 没有结果。

  • 当返回 block 中的最后一个值时, View 将更新为此最后报告的进度值。
  • slider 上的设置值在主线程上 - 在 dispatch_async() 中执行更改后没有任何变化在主线程上。

  • 这是完整的代码:
    #import "ViewController.h"

    @interface ViewController ()

    @end

    @implementation ViewController

    - (void)viewDidLoad
    {
    [super viewDidLoad];
    [self performSelector:@selector(doUpdate) withObject:nil afterDelay:5.0f];
    }


    - (void)doUpdate {
    __weak typeof(self.slider) weakSlider = self.slider;
    [self doSomethingAndReportProgress:^(CGFloat progress) {
    NSLog(@"3. reported progress: %f", progress);
    weakSlider.value = progress; /// slider has range 0 - 100
    NSLog(@"4. weakSlider.value: %f", weakSlider.value);
    }];
    }

    - (void)doSomethingAndReportProgress:(void(^)(CGFloat))block {
    [self doSomethingOtherAndReportProgress:^(CGFloat progress) {
    block(progress);
    NSLog(@"2. reported progress: %f", progress);
    }];
    }

    - (void)doSomethingOtherAndReportProgress:(void(^)(CGFloat))block {
    for (int i = 0; i < 10000; i++) {
    CGFloat progress = i / 100.0;
    block(progress);
    NSLog(@"1. reported progress: %f", progress);
    }
    }

    @end

    来自控制台的日志报废:
    2014-04-23 09:48:03.991 UIUpdateInBlock[87087:60b] 3. reported progress: 2.050000
    2014-04-23 09:48:03.991 UIUpdateInBlock[87087:60b] 4. weakSlider.value: 2.050000
    2014-04-23 09:48:03.991 UIUpdateInBlock[87087:60b] 2. reported progress: 2.050000
    2014-04-23 09:48:03.992 UIUpdateInBlock[87087:60b] 1. reported progress: 2.050000
    ....
    2014-04-23 09:48:04.421 UIUpdateInBlock[87087:60b] 3. reported progress: 3.950000
    2014-04-23 09:48:04.422 UIUpdateInBlock[87087:60b] 4. weakSlider.value: 3.950000
    2014-04-23 09:48:04.423 UIUpdateInBlock[87087:60b] 2. reported progress: 3.950000
    2014-04-23 09:48:04.423 UIUpdateInBlock[87087:60b] 1. reported progress: 3.950000
    ....

    为什么日志的顺序是:3, 4, 2 ,1 而不是 1, 2, 3, 4?

    先感谢您。

    最佳答案

    因为你把你的NSLog调用后block() ,只要把它们放在前面,你就会得到正确的结果;)

    关于ios - 为什么 View 即使在我的线程上也没有更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23238165/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com