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 に変更を加えるのではなく、NSNotification を現在の viewController に送信して、UI の作業を行うように指示します。

これは、MVC の境界を越える場合、または何をすべきかを認識している viewController が既にあるため、別のメソッドを記述するとコードが重複する場合に特に適しています。

于 2011-05-27T18:46:36.307 に答える