【问题标题】:How to use the NSTimer inside of the for loop iphone?如何在for循环iphone中使用NSTimer?
【发布时间】:2011-11-01 23:43:42
【问题描述】:

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

【问题讨论】:

    标签: iphone for-loop nstimer icalendar


    【解决方案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;
        }
    }
    

    【讨论】:

    • 感谢您的现场回复。我会将您的想法纳入我的代码中。谢谢。
    【解决方案2】:

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

    要完成循环的处理,您的应用应稍后开始循环的另一次迭代,例如在来自完成委托、计时器、performselector 或操作队列的回调中。后一种方法可以包括延迟。您必须知道如何解开循环以及如何保存本地状态才能做到这一点。退出带有回调的循环大致相当于延迟的“GOTO”语句。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 2014-11-01
      • 2017-05-24
      相关资源
      最近更新 更多