2013-02-10 61 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的帧速率。游戏应该使用这个方法来暂停游戏 。处于非活动状态的应用程序应该在等待转换到活动或背景 状态时进行最小程度的 工作。