iOS threading "Изменение слоя, который находится на стадии завершения" - PullRequest
0 голосов
/ 27 мая 2011

Я анализирую изображение, которое занимает некоторое время, и в то же время я хочу отобразить индикатор прогресса. Для этого я использую 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 ]

2 голосов
/ 27 мая 2011

Определите новый метод, чтобы выдвинуть контроллер подробного представления и используйте -performSelectorOnMainThread: withObject: waitUntilDone: , чтобы выполнить его в основном потоке.Не пытайтесь вносить какие-либо изменения в пользовательский интерфейс из других потоков.

0 голосов
/ 27 мая 2011

Все изменения пользовательского интерфейса должны быть в основном потоке, как вы заметили. Вместо того, чтобы вы вносили какие-либо изменения в пользовательский интерфейс, используя метод вне основного потока, отправьте NSNotification текущему viewController, сказав ему, чтобы он работал.

Это особенно хороший маршрут, если вы пересекаете границу MVC или если у вас уже есть viewController, который знает, что делать, так что написание отдельного метода приводит к дублированию кода.

...