2013-07-03 3 views
0

보기가 사라지면 루프 기능을 호출하고 싶습니다. 내가 어떻게 할 수 있니?IOS에서 통화 루프 기능을 중지하는 방법

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

} 

그리고 :이보기 사라질 때

-(void)updateArray 
{ 

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

updateArray 보통 callled되는이 내 코드입니다. 나는

+1

질문에 선택을 취소 했습니까? –

+1

이전 질문과의 차이점 http://stackoverflow.com/questions/17438987/stop-nsthread-on-ios? –

+0

음 ... 'break;'를 사용하여 루프를 멈출 수 있습니다. – TheTiger

답변

2

그것이 YES로 설정 viewWillAppear의 BOOL 바르 재산

BOOL loopShouldRun; 

확인 기능을 사전에

감사를 updateArray 전화를 중지합니다.

는이 코드를

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

를 사용 viewWillDisappear에서 NO로 설정.

@Michael Deuterman이 언급 한 바와 같이 sleepTimer가 실행되기 전에보기가 사라지면 문제가 발생할 수 있습니다.

그래서 heres는 NSTimer가있는 또 다른 솔루션입니다. 무효화 viewWillDiappear에 타이머

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

  • : viewWillAppear에 타이머를 @property (strong) NSTimer *timer;

  • 만들 :

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

  • ,691을

    • NSTimer 바르/@ 속성을 생성

    당신의 updateArray이 지금처럼 보일 것입니다 :

    -(void)updateArray { 
        NSLog(@"in loop"); 
    } 
    
    +0

    이것은 최적의 대답이 아닙니다. 이 @Pfitz의 문제점은 "sleepForTimeInterval : 2.0'에서 긴 수면 시간이 다가 오기 전에보기가 사라지고 해제 될 수 있다는 것입니다. –

    +0

    timer = [NSTimer timerWithTimeInterval : 2.0 호출 : @selector (updateArray) 반복 : 예] 오류입니다. 그것은 작동하지 않습니다 –

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

    동안 (1) 영원히 사실 것입니다. 그것을 멈추기 위해서는 루프가 멈추는 것을 막을 조건이 필요합니다. 예를 들어

    ,

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

    은 당신을 도움이되기를 바랍니다.

    +0

    또는 while (! (something happen)) {...} – zbMax

    0

    이 간단한 논리입니다 ... 하나 개의 플래그 변수를 가지고 다음

    - (void)viewWillDisappear:(BOOL)animated 
    

    방법 방법 위 viewdisapper보기 사라 직전에 호출 할 때 플래그 varibale의 값을 업데이트

    viewDidDisappear:(BOOL)animated

    위의 방법도 있습니다.당신의보기가 사라진 직후에 호출됩니다.

    위의 방법 중 하나에서 플래그 변수의 값을 변경할 수 있습니다. 플래그 변수 값에 따라 break을 while 루프에 넣으면 루프가 에 도달합니다.

    0

    사용 NSThread 대신 개월에 대한 performSelector

    NSThread *myThread; // preferable to declare in class category in .m file or in .h file 
    

    viewWillAppear 에서

    myThread = [[NSThread alloc] initWithTarget:self selector:@selector(updateArray) object:nil]; 
    [myThread start]; 
    

    viewWillDisappear 에서

    [myThread cancel]; // This will stop the thread and method will get stopped from execution 
    myThread = nil; // Release and nil object as we are re-initializing in viewWillAppear 
    

    의 자세한 내용은 다음을 참조하십시오 : NSThread Class Reference

    +0

    이것이 당신이 요구하는 방식인지 알려주십시오. – Mrunal

    관련 문제