Как приостановить цикл, чтобы запросить ввод (iPhone) - PullRequest
1 голос
/ 18 марта 2011

У меня довольно простая зацикленная операция, которая проверяет наличие явных ошибок и вероятных проблем в структуре данных.Я не буду вдаваться в подробности об этом.Я хочу приостановить выполнение этого цикла при возникновении ошибки, чтобы я мог спросить пользователя, что он хочет сделать с этой ошибкой, прежде чем продолжить проверку оставшихся данных.Кто-нибудь может дать какие-либо идеи о том, как лучше это сделать?

-Ash

Ответы [ 4 ]

1 голос
/ 18 марта 2011

Это остановит ваш цикл на 0,25 секунды, но это не то, что вы хотите сделать. Вы должны сначала сформулировать свой вопрос.

CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.25, false);
1 голос
/ 18 марта 2011

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

Разбить цикл на короткие обратные вызовы (сделать внутри каждой итерации цикла метод) и завершить каждый обратный вызов, возможно, через доли секундыСтоит операций внутреннего цикла.

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

0 голосов
/ 18 марта 2011

UIAlertView работает асинхронно, поэтому он не приостанавливает цикл.

Есть более умные способы написания вашего цикла, например используя блоки или обработчики завершения, но я бы посоветовал самый простой способ - просто преобразовать ваш код из:

-(void) method
{
...
for( int i=0; i<10; i++)
{
check_loop_item(i);
}
}

до:

int iCurrent, iEnd;

-(void) method
{
...
iCurrent = 0;
iEnd = 10;
[self doLoop];
}

-(void) doLoop
{
if( iCurrent >= iEnd )
return;

check_loop_item(iCurrent);
...
if( error )
{
// Popup a UIAlertView
}
else
{
iCurrent++;
[self doLoop];
}

... и в методе обратного вызова из UIAlertView выполните:

-(void) callbackFromUIAlertView
{
iCurrent++;
[self doLoop];
}

... т.е. цикл, который запускается один раз за раз и позволяет произвольно остановить / приостановить / возобновить его.

0 голосов
/ 18 марта 2011

Похоже, что UIAlertView - это то, что вы ищете:

Описание класса UIAlertView

...