2013-02-10 32 views
3

我在我的最新應用版本中遇到了一致的問題。我有一個在AppDelegate中運行的計時器,每隔30秒調用一次函數來加載一個新的廣告。我認爲這是這次事故的罪魁禍首。使用Crittercism,我已經爲13個用戶發生了20多次崩潰。用戶主要使用IOS 6或它的一些變體。這裏是日誌,它的給我:從後臺返回後,計時器循環偶爾崩潰

SEGV_ACCERR

0 libobjc.A.dylib 0x3acd25b0 objc_msgSend + 16

1基金會0x3394b277 __NSFireDelayedPerform + 451

2的CoreFoundation 0x330125df CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION + 15

3 CoreFoundation 0x33012291 __CFRunLoopDoTimer + 273

4的CoreFoundation 0x33010f01 __CFRunLoopRun + 1233

5的CoreFoundation 0x32f83ebd CFRunLoopRunSpecific + 357

6的CoreFoundation 0x32f83d49 CFRunLoopRunInMode + 105

7個GraphicsServices 0x36b452eb GSEventRunModal + 75

8的UIKit 0x34e99301 UIApplicationMain + 1121

9 AutoScene 0x000031b7 main(main。 L:7)

我的計時器是:

[NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(resetAdTimer) userInfo:nil repeats:YES]; 

我不知道這是否是同樣的問題,但如果我從後臺返回應用程序,它只是掛起我所經歷的時間。它似乎也掛了30秒,這導致我相信這是計時器代碼。

這是管理廣告抓取的糟糕方式嗎?定時器代碼在長時間進入背景時是否會擰緊?

感謝您的幫助!

回答

2

您應該使appWillResignActive中的計時器無效,並在appWillBecome處於活動狀態時再次創建它。 From the docs...

- (void)applicationWillResignActive:(UIApplication *)application 

你應該使用這種方法來暫停正在進行的任務,禁用定時器和 油門下的OpenGL ES的幀速率。遊戲應該使用這個方法來暫停遊戲 。處於非活動狀態的應用程序應該在等待轉換到活動或背景 狀態時進行最小程度的 工作。