2011-11-01 47 views
0

對於iPhone應用程序開發來說,這是非常新穎的。我從我的iPhone應用程序添加事件到iCal。用戶可以從應用程序一次向iCal添加多個事件。如果用戶將以上50個事件添加到iCal,則該事件不會添加到iCal中,並且應用程序崩潰。所以,我想避免應用程序崩潰。所以,我計劃在for循環中延遲添加事件到iCal(while循環處於運行狀態)。我如何暫停For循環運行並在10秒的延遲後繼續for循環。同時for循環應該在暫停10秒後繼續。我怎樣才能做到這一點?有任何想法嗎?請幫忙解決我的問題?提前致謝。如何使用for循環iPhone內的NSTimer?

回答

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; 
    } 
} 
+0

謝謝你的現場迴應。我將在您的代碼中加入您的想法。謝謝。 – Gopinath

0

你應該不是在iOS上暫停循環。如果無法及時並同步地完成處理,則應退出循環並退出包含循環的方法。

爲了完成循環的處理,您的應用程序應該稍後啓動循環的另一次迭代,例如從完成委託,計時器,執行選擇器或操作隊列進行回調。後一種方法可能包括延遲。您將必須知道如何解構循環以及如何保存本地狀態來執行此操作。用回調退出迴路大致相當於延遲的「GOTO」語句。

對於NSTimer調用在循環處理中很有用,您需要退出循環和方法,因爲只有這樣纔會調用定時器的回調選擇器。