これは私の問題です。私のアプリケーションがバックグラウンドに入ると、一定の時間が経過してから機能を実行したいと思っています。これは私が何をすべきかです:それは、私はそのコンソールプリントハローちょうど30秒後を見ることになってdispatch_after()バックグラウンドタスクが実行されないようにします。
UIBackgroundTaskIdentifier taskIdentifier;
すべての作品:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
isRunningInBackground = YES;
taskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];
int64_t delayInSeconds = 30;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void)
{
[self doSomething];
});
}
- (void)doSomething
{
NSLog(@"HELLO");
}
taskIdentifier
変数は、次のようにmyAppDelegate.hファイルで宣言されています去ってしまった。しかし、30秒が経過するまでアプリがフォアグラウンドに入ると、doSomething
は実行されたくありません。だから私はそれをキャンセルする必要があります。
- (void)applicationWillEnterForeground:(UIApplication *)application
{
isRunningInBackground = NO;
[self stopBackgroundExecution];
}
- (void)stopBackgroundExecution
{
[[UIApplication sharedApplication] endBackgroundTask:taskIdentifier];
taskIdentifier = UIBackgroundTaskInvalid;
}
しかし残念ながら、それはそれはまだ行われ、doSomething
をキャンセルしていない:これは、私はそれを行う方法です。私は間違って何をしていますか?どうすればその機能をキャンセルできますか?
あなたが正しいです! –
ありがとう!とても簡単!私は自分自身について考えていたはずです –