1

私のハンドラーがシステムによって呼び出されると、インスタンス変数へのポインターがいくつか失われるようです。

私の .m 実装では、

@implementation BackgroundWorker

MyApplication* myApp;
NSDate* lastUpdate;

そして私のハンドラーでは、その変数はもはや有効ではありません:

[[UIApplication sharedApplication] setKeepAliveTimeout:600 handler:^{

  // myApp is valid however

  // Check that enough time has passed
  NSDate* now = [NSDate date];

  if (lastUpdate == nil ||         // <--- lastUpdate not a valid object
    [now timeIntervalSinceDate:lastUpdate] >= TIME_RESOLUTION_SEC) {

    // do stuff

    lastUpdate = now;
  }

}];

クラス メソッドでlastUpdateを正しく初期化すると、アプリの初回実行時に有効になりますが、バックグラウンドに移行してハンドラーが呼び出されると、変数は無効になります。

バックグラウンド コールバック間でインスタンス変数を破棄/クリアしないように OS に指示する方法はありますか?

4

2 に答える 2

1

別のスレッドで解決策を見つけました:

Objective C で一部のオブジェクト メンバーが範囲外になるのはなぜですか

プロパティとサポート変数などに関係しています。

サポート変数の代わりに NSDate をプロパティに割り当てる必要がありました...

于 2013-03-27T14:16:33.563 に答える
1

値はアプリ デリゲートに格納しますが、おそらく NSUserdefaults に格納し、必要なたびに値を取得します。これにより、ユーザーがアプリを強制終了した場合にも値が保持されます。

于 2013-03-19T21:39:41.510 に答える