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

时间:2011-05-27 18:35:20

标签: multithreading ios mbprogresshud

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

正如您所注意到的,所有UI更改必须位于主线程中。而不是你离开主线程方法对UI进行任何更改,发送NSNotification到当前viewController告诉它做UI工作。

如果您正在越过MVC边界,或者如果您已经知道如何操作的viewController,那么编写单独的方法会导致重复的代码,这是一条特别好的路线。