2011-11-01 12 views
0

iPhoneアプリケーションの開発は非常に新しいです。私のiPhoneアプリからiCalにイベントを追加しています。ユーザーは、アプリからiCalに複数のイベントを一度に追加できます。ユーザーが50以上のイベントをiCalに追加すると、イベントはiCalに追加されず、アプリケーションがクラッシュすることになります。だから、私はアプリのクラッシュを避けたい。だから、私はforループの中でiCalに追加イベントを遅らせようと計画していた(ループは実行中)。どのようにして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

あなたはすべきですnot iOSのポーズループ。処理を迅速かつ同期的に完了できない場合は、ループを終了してループを含むメソッドを終了する必要があります。

ループの処理を完了するために、アプリケーションは完了デリゲート、タイマー、performselector、または操作キューからのコールバックのように、後でループの別の繰り返しを開始する必要があります。後者の方法には遅延が含まれる可能性があります。ループを構造化しない方法と、これを行うためにローカル状態を保存する方法を知る必要があります。コールバック付きのループを終了するのは、遅延 "GOTO"ステートメントとほぼ同じです。

NSTimer呼び出しがループ処理に役立つようにするには、ループとメソッドを終了して、タイマーのコールバックセレクタを呼び出す必要があります。

関連する問題