0

ビューが消えたときにループ関数の呼び出しを停止したい。どうやってやるの?これは私のコードです:

    -(void) viewWillAppear:(BOOL)animated
{
    [self performSelectorInBackground:@selector(updateArray)  withObject:nil];

}

と :

    -(void)updateArray
{

while (1)
{
    NSLog(@"IN LOOP");
   [NSThread sleepForTimeInterval:2.0];
....}

updateArray は通常、このビューが消えるときに呼び出されます。updateArray 関数の呼び出しを停止したい

前もって感謝します

4

4 に答える 4

2

iVarBOOLまたはプロパティを作成する

BOOL loopShouldRun;

viewWillAppear で に設定しYESます。

次に、このコードを使用します

-(void)updateArray
{
  while (loopShouldRun)
    {
      NSLog(@"IN LOOP");
      [NSThread sleepForTimeInterval:2.0];
....}
}

viewWillDisappear で NO に設定します。

しかし、@Michael Deuterman がコメントで述べたように、sleepTimer が起動する前にビューが消えると問題が発生する可能性があります。

したがって、NSTimer を使用した別のソリューションを次に示します。

  • NSTimeriVar/@property を作成します。@property (strong) NSTimer *timer;
  • viewWillAppearタイマーを作成します:

    timer = [NSTimer timerWithTimeInterval:2.0 invocation:@selector(updateArray) repeats:Yes]

  • viewWillDiappearタイマーを無効にします。

    if ([self.timer isValid]) { [self.timer invalidate] }

updateArray次のようになります。

-(void)updateArray {
  NSLog(@"in loop");
}
于 2013-07-03T07:14:40.733 に答える
0
while (1)
{
    NSLog(@"IN LOOP");
   [NSThread sleepForTimeInterval:2.0];
}

while(1) は永久に true になります。それを止めるには、ループの発生を止める条件が必要です。

例えば、

while (1)
{
    NSLog(@"IN LOOP");
   [NSThread sleepForTimeInterval:2.0];
   if(something happens)
    break;
}

お役に立てば幸いです。

于 2013-07-03T07:15:24.583 に答える
0

これは単純なロジックです...1つのフラグ変数を取り、ビューが消えたときにそのフラグ変数の値を更新するだけです

 - (void)viewWillDisappear:(BOOL)animated 

上記のメソッドメソッドは、ビューが消える直前に呼び出されます

viewDidDisappear:(BOOL)animated

上記の方法もあります。ビューが消えた直後に呼び出されます

したがって、上記の方法のいずれかでフラグ変数の値を変更できます。次に、フラグ変数の値に従って、 breakwhileループに入れるだけで、ループが壊れます。

于 2013-07-03T07:15:37.560 に答える