2012-12-07 2 views
-1

일부 고객이 말하는 iOS 앱이 있는데로드되지 않으며 무기한으로 회 전자가 표시됩니다. 이 회 전자는 앱 대리인에서 시작됩니다.응용 프로그램이로드되지 않음 - applicationDidBecomeActive

applicationDidBecomeActive 대리자에 중단 점을 놓고 xcode를 실행하면 마침내 이것을 재현 할 수있었습니다. 여기에 NSTimer가 호출됩니다.

다른 사람들이 본 적이 있는지 궁금 해서요,이 대리인 및 NSTimers와 충돌이 있습니까?

편집 : 메모리의 코드 샘플. 나중에 실제 코드를 가져와야 할 것입니다. 그것은 시작부터 앱이 모든에로드 할 수 없습니다 그냥 회가 표시되는 경우 응용 프로그램은이 후 바로 스케줄 doWork 방법 600 초 발사 할 수 있기 때문에

-(void)applicationDidBecomeActive:(UIApplication *)application {  
    [self toggleOpen];  
} 

- (void)toggleOpen {  
    if (!self.timer) { 
     self.timer = [NSTimer scheduledTimerWithTimeInterval:600 target:self selector:@selector(doWork) userInfo:nil repeats:YES]; 
    } else { 
     [self.timer invalidate]; 
     self.timer = nil; 
    } 
} 
- (void)doWork { 
    //Under certain conditions calls a web service (rarely) 
} 
+1

일부 코드를 표시하고 더 자세한 정보를 제공하거나 아무도 도움을 줄 수 없습니다. – rmaddy

+0

예, 문제에 대한 코드를 추가하십시오. –

+1

코드를 시도했지만 인터페이스를 차단하지 않습니다. 'doWork' 메쏘드는 예상대로 호출됩니다. 아마 문제는 그런 방법의 구현에 있습니다. –

답변

0

NSTimer가 applicationDidBecomeActive에서 실행되는 것과 관련하여 문제가 발생한 것으로 보입니다. 실행 루프를 사용할 수 있기 전에 NSTimer가 생성되었을 수 있습니다. applicationDidBecomeActive에서 NSTimer를 실행하면 결코 앱을 시작하지 못하도록 수정 한 것으로 보입니다.

1

, 그것 때문에 타이머의 수 없습니다 활성 상태가되고 다음 명령으로 이동합니다.

그러나 앱이 잘로드되어 600 초 후에 doWork 메서드에서 멈추는 경우 웹 서비스가 호출되는 방식 (동기식 또는 비동기식 호출) 일 수 있습니다.

다른 사람들이 말했듯이, 더 많은 코드를 보여주지 않으면 많은 도움이 될 수 없습니다.

관련 문제