0

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

2 回答 2

2

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

于 2011-05-27T18:42:49.427 回答
0

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

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

于 2011-05-27T18:46:36.307 回答