Xcode 7.0.1では、「バックグラウンドのシミュレーション」フェッチコマンドにより、performFetchWithCompletionHandler
が2回トリガーされます。
これはXcodeデバッグエラーですか、それともアプリケーションのリリースビルドを実行しているデバイスで発生する可能性があります。
更新これでXcode 7.1.1ができましたが、それでもperformFetchWithCompletionHandler
が2回呼び出されます。これが「実際に」発生するかどうかわからないため、フェッチアクションがすでに実行されている場合は状態を維持しています。
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler {
if (self.performingFetch) {
return completionHandler(UIBackgroundFetchResultNoData);
}
self.performingFetch = YES;
...
self.performingFetch = NO;
}
この問題を回避するには、App Delegateで静的ブール値を宣言し、ブール値を使用してバックグラウンドフェッチを1回実行します。
if (!runOnce)
{
[submission startSubmissionProcessWithCompletetionHandler:^(UIBackgroundFetchResult result){
NSDate *fetchStart = [NSDate date];
completionHandler(result);
NSDate *fetchEnd = [NSDate date];
NSTimeInterval timeElapsed = [fetchEnd timeIntervalSinceDate:fetchStart];
NSLog(@"Background Fetch Duration: %f seconds", timeElapsed);
}];
runOnce = YES;
}
else
{
completionHandler(UIBackgroundFetchResultNoData);
runOnce = NO;
}