Multithreading “iOS线程化”;“正在修改正在最终确定的图层”;

Multithreading “iOS线程化”;“正在修改正在最终确定的图层”;,multithreading,ios,mbprogresshud,Multithreading,Ios,Mbprogresshud,我正在分析一个需要一些时间的图像,同时我想显示一个进度指示器。为此,我使用MBProgressHUD 它几乎起作用了。。。我得到这个错误:“修改正在定稿的图层”。我想这是因为我没有在主线程中使用pushViewController。我说得对吗?有没有关于如何纠正这个问题的想法 我的代码: - (IBAction)buttonReadSudoku:(id)sender { mbProgress=[[MBProgressHUD alloc] initWithView:self.vie

我正在分析一个需要一些时间的图像,同时我想显示一个进度指示器。为此,我使用MBProgressHUD

它几乎起作用了。。。我得到这个错误:“修改正在定稿的图层”。我想这是因为我没有在主线程中使用pushViewController。我说得对吗?有没有关于如何纠正这个问题的想法

我的代码:

- (IBAction)buttonReadSudoku:(id)sender
{    
    mbProgress=[[MBProgressHUD alloc] initWithView:self.view];
    mbProgress.labelText=@"Läser Sudoku";
    [self.view addSubview:mbProgress];
    [mbProgress setDelegate:self];

    [mbProgress showWhileExecuting:@selector(readSudoku) onTarget:self withObject:nil animated:YES];
}

- (void)readSudoku
{
    UIImage *image = imageView.image;
    image = [ImageHelpers scaleAndRotateImage:image];
    NSMutableArray *numbers = [SudokuHelpers ReadSudokuFromImage:image];

    sudokuDetailViewController = [[SudokuDetailViewController alloc] init];
    [sudokuDetailViewController setNumbers:numbers];

    [[self navigationController] pushViewController:sudokuDetailViewController animated:YES];
}

定义一个新方法来推送详图视图控制器,并使用它在主线程上执行该操作。不要尝试从其他线程进行任何UI更改。

正如您所注意到的,所有UI更改都必须在主线程中进行。不要脱离主线程方法对UI进行任何更改,而是向当前viewController发送通知,告知其执行UI工作

如果您正在跨越MVC边界,或者如果您已经有一个viewController知道该做什么,那么编写单独的方法会导致重复代码,那么这是一个特别好的方法