PerformFetchWithCompletionHandler在用Xcode模拟时调用两次

在Xcode 7.0.1中,“模拟背景”获取命令导致performFetchWithCompletionHandler被触发两次。

这是一个Xcodedebugging错误,或者这可能发生在运行该应用程序的发行版的设备上。

更新现在我们有Xcode 7.1.1,仍然执行performFetchWithCompletionHandler被调用两次。 由于我不确定这是否也发生在“野外”我保持一个状态,如果我的抓取操作已经在运行。

 - (void)application:(UIApplication *)application performFetchWithCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler { if (self.performingFetch) { return completionHandler(UIBackgroundFetchResultNoData); } self.performingFetch = YES; ... self.performingFetch = NO; } 

我通过在App Delegate中声明一个静态布尔值来解决这个问题,然后使用布尔值来获取后台执行一次

 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; }