0

押すとオブジェクトを作成するボタンがありますthing。次に、10 秒間スリープしてから、次thing.goのようなアプリケーション状態を取得する呼び出しを行います

UIApplicationState state = [[UIApplication sharedApplication] applicationState];

次に、この質問の回答とコメントに従って、アプリがバックグラウンドにあるかどうかを確認し、バックグラウンドにある場合はローカル通知を表示します。

だから私はボタンを押してすぐにホームキーを押してメイン画面に移動します(それによりアプリをバックグラウンドに置きます)

ただし、if ステートメントが false を返しているため、内部でコードを実行していないことがわかります (if ステートメント内に NSLog を配置することにより)。

そこで、私の次の思考プロセスは、 を使用してコンソールに日付を表​​示することでしたNSLog(state)。明らかに私はこれを行うことはできません。

では、applicationState を表示して問題を解決するにはどうすればよいでしょうか? または、このクラスのメソッド内でアプリがバックグラウンドで実行されているかどうかを確認する別の方法はありますか?

ボタンが押されgoたときに内部で呼び出される関数は次のとおりですIBAction

-(void)go {
    if (state == UIApplicationStateBackground) {
        NSLog(@"App is in background");
    }
}

これはボタンにリンクされているIBActionものです。つまり、ボタンが押されたときに実行されます

- (IBAction)button_help {
    myclass* thingy = [[myclass alloc] init];
    sleep(10);
    thingy.go;
}
4

2 に答える 2

1

あなたはほとんど睡眠を使わないでください。それが存在することを忘れてください。アプリがロックされ、バックグラウンドへの移行を含め、何も変わりません。

やりたいことは、thing.go を呼び出す 10 秒のタイマーを設定することです。

ただし、通常、タイマーはバックグラウンドで実行されないため、これは複雑になります。実際、特別な手順を実行しない限り、アプリがバックグラウンドでプロセッサ時間を取得することはありません。あなたはバックグラウンドに行くと言われ、次に受け取る呼び出しはフォアグラウンドに戻ることです。

アプリがバックグラウンドに送信されているというメッセージを受け取ると、バックグラウンド処理時間を要求するシステム コールを行う必要があります。(頭のてっぺんからの呼び出しを覚えていません。また、現時点では Xcode を実行していません。)

Apple は iOS 7 でバックグラウンド処理のルールを変更しましたが、これは iOS 6 だとおっしゃっているので、それらの変更は適用されません。

于 2013-10-26T02:44:49.197 に答える