标签需要很长时间才能改变

Siv*_*der 1 objective-c ios

我正在学习开发一个IOS应用程序.我有以下问题.我想用标签来显示一个字符串.此字符串显示需要很长时间(10-15秒).这是正常的吗?以下代码位于viewDidLoad函数中

NSLog(self.example); //displays almost immediately 
_labelOutput.text= [NSString stringWithFormat:@"%@", self.example;//takes 15 seconds
Run Code Online (Sandbox Code Playgroud)

整个viewDidLoad函数:

- (void)viewDidLoad
{
    [super viewDidLoad];
    double lat = 43.7000;
    double lon = -79.4000;
    NSArray *users = [[NSArray alloc] initWithObjects:@"user_1",@"user_2",@"user_3", nil];

    id prediction = [[Prediction alloc] initWithUsers:users Lat:lat Lon:lon];

    [prediction populate:^{
        self.resName= [prediction generateRandom][@"id"];
        NSLog([NSString stringWithFormat:@"%@", self.resName]);
        _labelOutput.text= [NSString stringWithFormat:@"%@", self.resName];

    }];

}
Run Code Online (Sandbox Code Playgroud)

rob*_*off 5

什么是-[Prediction populate:]与块呢?我的猜测是它在后台线程或队列上运行块.您不能从后台线程或队列修改UI.您的应用可能会崩溃或只是无法预测.你更新屏幕的神秘延迟是这个错误的常见症状.

您只能从主线程或队列修改UI.试试这个:

[prediction populate:^{
    self.resName= [prediction generateRandom][@"id"];
    NSLog([NSString stringWithFormat:@"%@", self.resName]);
    dispatch_async(dispatch_get_main_queue(), ^{
        _labelOutput.text= [NSString stringWithFormat:@"%@", self.resName];
    });
}];
Run Code Online (Sandbox Code Playgroud)