Вы должны понимать, как работает цикл обработки событий.Когда вы вызываете [baseAlert show]
, представление оповещений добавляется в иерархию представлений, но на самом деле оно не отображается на экране, пока не закончится текущий блок кода и управление не вернется в цикл обработки событий.Выполняя свои вычисления сразу же после запроса представления оповещения, вы предотвращаете появление оповещения.
Это похоже на написание письма, в котором говорится, что вы планируете покрасить свой дом, потратив неделю на покраску своего домазатем написать еще одно письмо, в котором говорится, что вы это сделали, и THEN взять оба письма и отправить их в почтовый ящик для одновременной доставки.
Если у вас дорогие вычисления,Самый простой способ справиться с этим в iOS 4 и более поздних версиях - поместить блок кода в очередь отправки, чтобы работа выполнялась в фоновом потоке, а основной поток все еще мог обновлять экран и реагировать на нажатия пальцами.
[baseAlert show];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, NULL), ^{
// we're on a secondary thread, do expensive computation here
// when we're done, we schedule another block to run on the main thread
dispatch_async(dispatch_get_main_queue(), ^{
// this code is back on the main thread, where it's safe to mess with the GUI
[baseAlert dismissWithClickedButtonIndex:0 animated:YES];
});
});