UIAlertView, показанный из фонового потока и без делегата, создает EXC_BAD_ACCESS - PullRequest
9 голосов
/ 16 ноября 2011

Вот мой код:

#ifdef DEBUG
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"ERROR" message:@"JSON Parsing Error" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alertView show];
    [alertView release];
#endif

Этот код выполняется в фоновом потоке (отвечает за синтаксический анализ), и ошибка происходит только каждый раз.Есть идеи о том, в чем здесь проблема?

Ответы [ 2 ]

17 голосов
/ 16 ноября 2011

Не связывайтесь с пользовательским интерфейсом из фонового потока.Создайте метод и вызовите этот метод в главном потоке:

[someObject performSelectorOnMainThread:@selector(showDebug:)
                             withObject:@"JSON Parsing Error"
                          waitUntilDone:YES];
2 голосов
/ 16 ноября 2011

Вы не должны выполнять код пользовательского интерфейса в отдельном потоке.

Если ваше приложение имеет графический интерфейс пользователя, рекомендуется что вы получаете пользовательские события и инициировать обновления интерфейса из основного потока вашего приложения. Такой подход помогает избежать проблемы синхронизации, связанные с обработкой пользовательских событий и содержимое окна чертежа. Некоторые рамки, такие как Какао, как правило, требуют такого поведения, но даже для тех, кто этого не делает, сохраняя это поведение в главном потоке имеет преимущество в упрощении логики для управления вашим пользовательским интерфейсом.

Темы и ваш пользовательский интерфейс

...