如何在for循环iphone中使用NSTimer?

时间:2011-11-01 14:00:56

标签: iphone for-loop nstimer icalendar

对iPhone应用程序开发很新。我从iphone应用程序中将事件添加到iCal。用户可以从应用程序一次向iCal添加多个事件。如果用户将以上50个事件添加到iCal,则该事件不会在iCal中添加并且应用程序崩溃。所以,我想避免应用程序崩溃。因此,我计划在for循环中将添加事件延迟到iCal(当循环处于运行状态时)。如何暂停For循环运行并在10秒延迟后继续for循环。同时for循环应该在暂停10秒后继续。我怎样才能做到这一点?有任何想法吗?请帮忙解决我的问题?提前谢谢。

2 个答案:

答案 0 :(得分:1)

做你所追求的最好的方法是NSOperationQueue,但这有点技术性。这样的事情可能更容易理解:

部首:

NSMutableArray *events;

指定事件列表时:

events = /*....*/;
[self nextOp];

nextOp方法:

-(void)nextOp {
    // Do 10 events at a time.
    int stop = MIN(10,[events count]);
    for (int i = 0; i < stop; i++) {
        //Add [events objectAtIndex:i] to iCal
    }

    // Remove these processed events.
    [events removeObjectsInRange:NSMakeRange(0,stop)];
    if ([events count] > 0) {
        // We've still got more events to go, so schedule our next call
        [self performSelector:@selector(nextOp) withObject:nil afterDelay:10];
    } else {
        [events release];
        events = nil;
    }
}

答案 1 :(得分:0)

你应该在iOS上暂停循环。如果无法及时并同步完成处理,则应退出循环并退出包含循环的方法。

要完成循环处理,您的应用程序应该稍后启动循环的另一次迭代,例如在来自完成委托,计时器,执行选择器或操作队列的回调中。后一种方法可以包括延迟。您将不得不知道如何非结构化循环以及如何保存本地状态来执行此操作。使用回调退出循环大致相当于延迟的“GOTO”语句。

要使NSTimer调用在循环处理中有用,您需要退出循环和方法,因为只有这样才能调用计时器的回调选择器。