2012-12-07 128 views
-1

我有一個iOS應用程序,一些客戶說不會加載,他們無限期地看到一個微調。此微調器在應用程序委託中啓動。應用程序未加載 - applicationDidBecomeActive

如果我在applicationDidBecomeActive委託中放置一個斷點,然後讓xcode運行,我終於可以重現這一點。這裏有一個NSTimer被調用。

我想知道這是否是別人看到的,是否與這個代表和NSTimers有衝突?

編輯:從內存中的代碼示例。我將不得不在稍後得到實際的代碼。

-(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

看來問題是關於在applicationDidBecomeActive中觸發的NSTimer。這可能在運行循環可用之前創建了NSTimer。註釋掉NSTimer在applicationDidBecomeActive中觸發似乎已經修復了從未啓動的應用程序。

1

如果應用程序無法加載所有,只是顯示了微調,因爲它啓動時,它不能是因爲計時器的,因爲它只是調度doWork方法被解僱600秒的應用程序有後變爲活動狀態,然後轉到下一個命令。

但是,如果應用程序加載正常,然後在600秒後卡在doWork方法中,可能是因爲Web服務被調用的方式(同步與異步調用)。

因此,像其他人所說的那樣,除非您展示更多代碼,否則不能提供多少幫助。

相關問題