5

最新のアプリ リリースで一貫して問題が発生しています。新しい広告をロードするために 30 秒ごとに関数を呼び出す AppDelegate で実行されるタイマーがあります。それが今回の事故の犯人だと思います。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.m:7)

私のタイマーは:

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

同じ問題かどうかはわかりませんが、バックグラウンドからアプリに戻るとハングすることが何度かありました.30秒間もハングしているようで、タイマーコードだと思います.

これは、広告のフェッチを管理する方法として不適切ですか? 長時間バックグラウンドに入ると、タイマーコードが台無しになりますか?

ご協力いただきありがとうございます!

4

2 に答える 2

3

appWillResignActive でタイマーを無効にし、appWillBecome active で再度作成する必要があります。 ドキュメントから...

- (void)applicationWillResignActive:(UIApplication *)application 

このメソッドを使用して、進行中のタスクを一時停止し、タイマーを無効にし、OpenGL ES フレーム レートを調整する必要があります。ゲームは、このメソッドを使用してゲームを一時停止する必要があります。非アクティブ状態のアプリケーションは、アクティブ状態またはバックグラウンド状態への移行を待機している間、最小限の作業を行う必要があります。

于 2013-02-10T21:42:00.793 に答える