iOS 线程"Modifying layer that is being finalized"



我正在分析一个需要一些时间的图像,同时我想显示一个进度指示器。为此,我使用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];
}

定义一个新方法来推送局部视图控制器,并使用-performSelectorOnMainThread:withObject:waitUntilDone:在主线程上执行。不要试图从其他线程进行任何UI更改。

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

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

相关内容

最新更新