如何暂停循环以询问输入(iPhone)

时间:2011-03-17 21:25:05

标签: iphone cocoa xcode ipad ipod

我有一个相当简单的循环操作,可以检查数据结构中的明显错误和可能的问题。我不会详细介绍它。我希望能够做的是在遇到错误时暂停执行此循环,这样我就可以在继续检查剩余数据之前询问用户他们想要对该错误做些什么。

任何人都可以提出有关如何做到最好的想法吗?

-Ash

4 个答案:

答案 0 :(得分:1)

不要在UI运行循环中的循环内进行长时间的操作。它向用户呈现无响应的UI;如果应用程序锁定时间过长,操作系统可能会终止它。

将循环分解为短回调(使每个循环迭代的内部成为一个方法),并在可能只需要几秒钟的内循环操作后退出每个回调。

或者将循环作为后台线程中的任务执行,并在等待来自前台UI运行循环的消息时使用锁来停止循环,以了解如何为某个循环状态执行操作。

答案 1 :(得分:1)

这将使你的循环停止0.25秒,但这不是你想要做的。你需要先重新提出你的问题。

CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.25, false);

答案 2 :(得分:0)

看起来像你正在寻找的UIAlertView:

UIAlertView Class Reference

答案 3 :(得分:0)

UIAlertView是异步的,所以它不会暂停循环。

有更聪明的方法来编写循环,例如使用块或完成处理程序,但我建议EASIEST方法只是转换代码:

-(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];
}

...即。一次运行一次的循环,让你随意停止/暂停/恢复它。